Codeforces Round #766 (Div. 2) - D. Not Adding
2024-10-21 20:44:37
GCD + 调和级数
题意
有 \(n\;(1<=n<=10^6)\) 个互不相同的数 \(a[i]\;(1<=a[i]<=10^6)\), 每次可以在 a 数组中选择两个数 \(a[i],a[j]\), 将令 \(d=gcd(a[i],a[j])\), 如果 \(d\), 不在 a 数组中,就把 \(d\) 加进去
求最多能加进去多少个数
思路
- 看到值域只有 \(10^6\), 可以想到可能与调和级数有关
- 对于数论题,很多时候可以更换枚举的顺序,所以可以枚举 \(d\), 看 \(d\) 能不能被加进去
- 对于所有 \(d\) 的倍数,如果他们的 \(gcd\) 等于 \(d\), 说明 \(d\), 可以被加进去
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>
#include <set>
using namespace std;
#define endl "\n"
typedef long long ll;
typedef pair<int, int> PII;
const int N = 1e6 + 10;
int n;
int cnt[N];
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n;
int ans = 0;
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
cnt[x]++;
}
for (int d = 1; d <= N - 10; d++)
{
int g = 0;
for (int i = d; i <= N - 10; i += d)
if (cnt[i]) g = __gcd(g, i);
if (g == d && !cnt[d]) ans++;
}
cout << ans << endl;
return 0;
}
最新文章
- Paypal开发中遇到请求被中止: 未能创建 SSL/TLS 安全通道及解决方案
- Node.js 教程 03 - 创建HTTP服务器
- 山东省第七届ACM省赛------Triple Nim
- 10. javacript高级程序设计-DOM
- Logistic Regression逻辑回归
- 【jQuery基础学习】05 jQuery与Ajax以及序列化
- EDIUS设置采集磁带的方法
- Mac下显示\隐藏所有文件
- DIY RazorEngine 的程序集生成方式
- C#与C++、Java之比较概览
- DG下手工处理v$archive_gap方法
- BZOJ 2879 NOI2012美食节
- ssh密钥登录及远程执行命令
- Gathering Initial Troubleshooting Information for Analysis of ORA-4031 Errors on the Shared Pool
- ESP8266 RTOS SDK烧写环境构建
- [JavaScript]为JS处理二进制数据提供可能性的WEB API
- ***使用Fiddler抓取Android安卓手机的APP请求
- jQuery弹出层插件大全
- JavaWeb基础—数据库连接池DBCP、C3P0
- 微信小程序 功能函数 支付接口