Codeforces Round #766 (Div. 2) D - Not Adding解题报告
Posted skywalker767
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #766 (Div. 2) D - Not Adding解题报告相关的知识,希望对你有一定的参考价值。
好骚的操作
https://codeforces.com/contest/1627/problem/D
c
=
g
c
d
(
a
,
b
)
c = gcd(a , b)
c=gcd(a,b)
题目思路很简单,枚举每一个C,去看看存不存在他的两个倍数。但是被题解的操作惊住了,这段代码保证了如果有两个他的倍数,并且gcd(a, b)不存在,一定能加进去。
if(st[j])
best_gcd[i] = gcd(best_gcd[i] , j);
#include <bits/stdc++.h>
#define int long long
#define all(a) a.begin(),a.end()
#define forn(i , n) for(int i = 0;i < n; i ++)
using namespace std;
typedef pair<int , int> pii;
void solve()
int ans = 0;
int n; cin >> n;
vector<bool> st(1e6 + 1 , false);
vector<int> best_gcd(1e6 + 1 , 0);
for (int i = 0 , x;i < n && cin >> x;i ++) st[x] = true;
for (int i = 1;i <= 1e6;i ++)
if(st[i]) continue;
for (int j = i;j <= 1e6;j += i)
if(st[j])
best_gcd[i] = gcd(best_gcd[i] , j);
// cout << i << " " << j << " best_gcd["<< i << "]" << best_gcd[i] << endl;
ans += best_gcd[i] == i;
cout << ans << endl;
signed main()
// int _; cin >> _;
// while (_ --)
solve();
return 0;
以上是关于Codeforces Round #766 (Div. 2) D - Not Adding解题报告的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #766 (Div. 2) D - Not Adding解题报告
Codeforces Round #766 (Div. 2) D - Not Adding解题报告
Codeforces Round #766 (Div. 2) D - Not Adding解题报告
Codeforces Round #436 E. Fire(背包dp+输出路径)