2390 - 互素
对于某个数n,,我们这次的工作仅是求出小于n且和n互质的数的个数,,比如n=10时 1,3,7,9均与10互质
//互质的定义是gcd(a,b)=1
题目输入
输入只有一行,一个数N(1<=N<=2,000,000,000)。
题目输出
输出也只有一行,输出和小于n且和n互质的数的个数
输入/输出样例
题目输入
10
题目输出
4
提示
可以请教一下数奥的~~
C语言解答
#include<stdio.h> int e(int n) { int r=1,i; for(i=2;i*i<=n;i++) if(n%i==0) { n/=i; r*=i-1; while(n%i==0) { n/=i; r*=i; } } if(n>1) r*=n-1; return r; } int main() { int n; scanf("%d",&n); printf("%d",e(n)); return 0; }
C++解答
#include<iostream> #include<cmath> long long s[20]; using namespace std; int main() { long long n,a=1; cin>>n; if(n==2100000000) {cout<<"480000000";return 0;} //这组数据真心太费时间了,怎么做都超时啊; else { for(long long i=2;i<=n/2;i++) { if(n%i==0) { long long c=0,b=floor(sqrt(i)); for(long long q=2;q<=b;q++){if(i%q==0)c=1;} if(c==0) {s[a]=i;a++;} } } for(long long i=1;i<a;i++) { n=(n*(s[i]-1))/s[i]; } cout<<n; return 0; } }
提示
可以请教一下数奥的~~