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+输出路径)

Codeforces Round #396 (Div. 2)C. Mahmoud and a Message(dp)

[ACM]Codeforces Round #534 (Div. 2)