10亿以内和987654互质正整数的和[转自深圳-冒泡]

容斥原理,把与987654不互质的数的和算出来,即可。

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 long long pri[4]={2,3,97,1697};         //987654的质因子
 5 long long big=1000000000;
 6 int main()
 7 {
 8     long long sum=0,mat;
 9     int i,j;
10     for(i=1;i<16;i++){
11         int cnt=0;
12         int temp=i;
13         mat=1;
14         for(j=0;temp;temp>>=1,j++){
15             if(temp%2){
16                 mat*=pri[j];
17                 cnt++;
18             }
19         }
20         if(cnt%2)
21             sum+=(mat+big/mat*mat)*(big/mat)/2;
22         else
23             sum-=(mat+big/mat*mat)*(big/mat)/2;
24     }
25     //printf("%lld\n",sum);
26     printf("%lld\n",(1+big)*big/2-sum);
27     return 0;
28 }
29 
30 
31 /*
32 
33 //以下代码计算987654的质因子
34 #include <iostream>
35 #include <cstdio>
36 using namespace std;
37 
38 int main()
39 {
40     int x=987654,i;
41     for(i=2;i<x;i++){
42         if(x%i==0){
43             printf("%d\n",i);
44             while(x%i==0)
45                 x/=i;
46         }
47     }
48     if(x>1)printf("%d\n",x);
49     return 0;
50 }
51 */

 

posted @ 2014-04-25 17:31  文少爷  阅读(323)  评论(0编辑  收藏  举报