传送门
4939 欧拉函数
时间限制: 1 s
空间限制: 1000 KB
题目等级 : 钻石 Diamon
题目描述 Description
输入一个数n,输出小于n且与n互素的整数个数
输入描述 Input Description
包含多组数据,n=0时结束
测试数据组数不会很多,不必先打表后输出
输出描述 Output Description
一组数据一行
样例输入 Sample Input
364684
346
5432
11
24
0
2333333
233333333
0
233333333333333
2333333333333333333333333333333333333333333333333
样例输出 Sample Output
165120
172
2304
10
8
数据范围及提示 Data Size & Hint
1<n<9223372036854775807
【code】
搬来了几个模板
#include<cstdio> using namespace std; long long n,ans; int main() { while(1) { scanf("%lld",&n); if(!n) break; ans=n; for(long long i=2;i*i<=n;i++) if(n%i==0) { while(n%i==0) n/=i; ans=ans/i*(i-1); } if(n>1) ans=ans/n*(n-1); printf("%lld\n",ans); } }
#include<cstdio> using namespace std; int main() { long long n,ans; while(1) { scanf("%lld",&n); if(!n) return 0; ans=n; if(n%2==0) { while(n%2==0) n/=2; ans=ans/2; } for(long long i=3;i*i<=n;i+=2) if(n%i==0) { while(n%i==0) n/=i; ans=ans/i*(i-1); } if(n>1) ans=ans/n*(n-1); printf("%lld\n",ans); } }
时间: 2024-10-26 03:26:00