zoukankan      html  css  js  c++  java
  • HDU 5212

    CodeForces 839D - Winter is here 可以说是一模一样了

    /*
    HDU 5212 - Code [ 容斥 ]
    题意:
    	求 ∑ [1<=i,j<=n] gcd(a[i], a[j]) * (gcd(a[i], a[j])-1)
    分析:
    	改用权值数组num[i] 记录 i 的倍数的个数, sum[i] 为 gcd(a,b) >= i 的 (a,b) 对
    	然后按容斥减去 i 的倍数 sum[j] 对 sum[i] 的影响,使得 sum[i] 最终等于 gcd(a,b) == i 的 (a,b) 对
    	复杂度 O(nlogn)
    */
    #include <bits/stdc++.h>
    using namespace std;
    const int MOD = 10007;
    const int N = 1e4+5;
    int n, num[N], Max, sum[N];
    int main()
    {
        while (~scanf("%d", &n))
        {
            memset(num, 0, sizeof(num));
            Max = 0;
            for (int i = 1; i <= n; i++)
            {
                int x; scanf("%d", &x);
                num[x]++;
                Max = max(Max, x);
            }
            for (int i = 1; i <= Max; i++)
                for (int j = i+i; j <= Max; j += i)
                    num[i] += num[j];
            int ans = 0;
            for (int i = Max; i >= 1; i--)
            {
                sum[i] = 1LL * num[i]*num[i] % MOD;
                for (int j = i+i; j <= Max; j += i)
                    sum[i] = (sum[i] - sum[j] + MOD) % MOD;
                ans = (ans + 1LL * sum[i] * i*(i-1) % MOD) % MOD;
            }
            printf("%d
    ", ans);
        }
    }
    

      

  • 相关阅读:
    关于多机处理问题
    Prime
    Djkstra
    jbdc总结
    mysql存储过程
    sqlHelper 类型的编写
    JDBC开发
    java线程
    java事件监听机制
    坦克大战编程
  • 原文地址:https://www.cnblogs.com/nicetomeetu/p/7360652.html
Copyright © 2011-2022 走看看