容斥原理,把与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 ",sum); 26 printf("%lld ",(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 ",i); 44 while(x%i==0) 45 x/=i; 46 } 47 } 48 if(x>1)printf("%d ",x); 49 return 0; 50 } 51 */