ABC191F

一个可以观察的特性是,所以先找出每个数的因子,其实不难看出,min操作的结果就是删去一个数。且只有最小值不能被删去.且gcd的操作也是单调递减的。所以最后这个数的大小一定小于等于
所以问题可以转化为:让你从n个数中选取出一个子集gcd。问你有多少种结果 ≤
注:因为我们一旦从一个子集中gcd出一个 ≤ 的数。接下来就是把他们全min起来。这样就可以实现上述效果了。

代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
const int N = 2e3 + 10;
//int a[N];
int n;
int main(){
    map<ll,vector<ll>>q;
    cin >> n;
    ll d = 1e9;
    for(int i=1;i<=n;i++){
        ll x;
        cin >> x;
        d = min(d,x);
        for(ll j = 1;j * j <= x;j++){
            if(x % j == 0){
                q[j].push_back(x);
                if(j * j != x) q[x/j].push_back(x);
            }
        }
    }
    int ans = 0;
    for(auto g:q){
        if(g.first > d) break;
        ll gcd = g.second[0];
        for(auto k:g.second) gcd = __gcd(gcd,k);
        if(gcd == g.first) ans++;
    }
    cout << ans <<  endl;
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
03-12 09:57
软件测试
程序员小白条:1)确定测试,测开的方向,技术栈不能写这么少 2)课程凑数的,不是99,100分没必要写 3)实习经历这块要有突出的不是劳动性质的亮点,自己设计的什么方案,什么自动化?什么提效工具?不是一些边角料,人云亦云的东西,没吸引力 4) 校园经历纯没用 5)尽量少写减分项
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务