hdu 5212(容斥原理)
2015-04-27 01:43
357 查看
Code
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 77 Accepted Submission(s): 27
Problem Description
WLD likes playing with codes.One day he is writing a function.Howerver,his computer breaks down because the function is too powerful.He is very sad.Can you help him?
The function:
int calc
{
int res=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
res+=gcd(a[i],a[j])*(gcd(a[i],a[j])-1);
res%=10007;
}
return res;
}
Input
There are Multiple Cases.(At MOST 10)
For each case:
The first line contains an integer N(1≤N≤10000).
The next line contains N integers a1,a2,...,aN(1≤ai≤10000).
Output
For each case:
Print an integer,denoting what the function returns.
Sample Input
5
1 3 4 2 4
Sample Output
64
Hintgcd(x,y) means the greatest common divisor of x and y.
Source
BestCoder Round #39 ($)
Recommend
hujie | We have carefully selected several similar problems for you: 5213 5209 5208 5205 5204
给你一个a数组,让你计算那段代码的结果,用容斥原理就ok,莫比乌斯反演也行,不过不会莫比乌斯反演(也是容斥原理)orz。。。改天学习下。
代码如下:
#include<iostream> #include<algorithm> #include<cstdio> #include<vector> #include<cstring> #include<map> using namespace std; typedef long long ll; const int maxn = 1e4 + 10; const ll mod = 10007; #define rep(i,a,b) for(int i=(a);i<(b);i++) #define pb push_back int cnt[maxn],a[maxn]; ll d[maxn]; int main() { int n; while(~scanf("%d",&n)) { int Mgcd = 1; for(int i = 0; i < n; i++) { int x; scanf("%d",&x); Mgcd = max(Mgcd,x); a[i] = x; } memset(cnt,0,sizeof(cnt[0])*Mgcd+20); for(int i = 0; i < n; i++)cnt[a[i]]++; ll ans = 0,res = 0; /*d[i]表示任取两数gcd为i的方案数*/ for(ll i = Mgcd; i > 0; i--) { ll tot = 0; for(ll j = i; j <= Mgcd; j+= i) { tot += cnt[j]; d[i] = (d[i]-d[j])%mod;/*减去gcd为i的倍数的方案数(容斥原理)*/ } /*gcd为i的方法数等于任选两个数(可重)是i的倍数的方案 除去gcd为i的倍数的情况(前面已经减掉了)*/ d[i] = (d[i] + tot*tot)%mod; ans = (ans+d[i]*i*i)%mod; res = (res+i*d[i])%mod; } cout<<((ans-res)%mod+mod)%mod<<endl; } return 0; }
相关文章推荐
- Hdu 5212 Code【容斥原理】
- hdu 1796(容斥原理)
- HDU 4407 - Sum(容斥原理)
- HDU 4135 Co-prime (容斥原理)
- HDU 1695 GCD 解题报告(欧拉函数 + 容斥原理)
- hdu 2204 容斥原理
- HDU 1796 How many integers can you find 容斥原理
- HDU 1796 How many integers can you find (容斥原理)
- hdu 5072 Coprime 容斥原理
- [hdu 1796 How many integers can you find]容斥原理模板
- hdu 1796 How many integers can you find 容斥原理
- hdu 3388 Coprime 容斥原理 二分查找
- hdu 1796 How many integers can you find(容斥原理)
- hdu 5297 容斥原理
- HDU 1695 GCD (数论-整数和素数,组合数学-容斥原理)
- HDU 1695 容斥原理
- hdu 1695 GCD 容斥原理 ural 1091
- Hdu 5514 Frogs (容斥原理)
- HDU 2204Eddy's爱好(容斥原理)
- hdu--2588--欧拉函数||容斥原理