设为首页 加入收藏

TOP

hdu 5212(容斥原理)
2015-11-21 01:03:52 来源: 作者: 【 】 浏览:1
Tags:hdu 5212 容斥 原理

?

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
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
        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 = (d[i]*i*i)%mod; res = (res+i*d[i])%mod; } cout<<((ans-res)%mod+mod)%mod<
        
         

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c++设计模式---适配器模式 下一篇c++设计模式---代理模式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: