标签:
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<vector> #include<queue> #include<stack> #include<map> #define N 1000100 using namespace std; __int64 k; __int64 prime[N],num[N]; int t; __int64 IEP(__int64 pn){ /// [n,m]区间求与k互质的个数 __int64 pt = 0; __int64 s = 0; num[pt++] = -1; for(__int64 i=0;i<t;i++){ __int64 l = pt; for(__int64 j=0;j<l;j++){ num[pt++] = num[j]*prime[i]*(-1); } } for(__int64 i=1;i<pt;i++){ s += pn/num[i]; } return s; } int main(){ while(scanf("%I64d",&k)!=EOF){ __int64 n = k; __int64 pk = sqrt(k); t = 0; for(int i=2;i<=pk;i++){ if(k%i == 0){ prime[t++] = i; } while(k%i == 0){ k = k/i; } } if(k!=1){ prime[t++] = k; } __int64 sum = n - IEP(n); printf("%I64d\n",sum); } return 0; }
版权声明:本文为博主原创文章,如有特殊需要请与博主联系 QQ : 793977586。
标签:
原文地址:http://blog.csdn.net/yeguxin/article/details/48035849