题目不是很难
跟大家分享下
#include<iostream> using namespace std; int a[30]={0}; int i=1;//避免数组越界 bool prime(int n)//素数判断 { if(n<2) return false; for(int i=2;i*i<=n;i++) { if(n%i==0) return false; } return true; } void f(int n) { int s=n; int x=2; while(n>1)//while循环用来分解质因数 { if(n%x==0) { n=n/x; if(x!=a[i-1]) { a[i++]=x;//并找出不相同的质因数 放入a数组中 } } else { x++; } } long long sum1=1; long long sum=1; for(int j=1;j<i;j++) { sum1*=a[j]; } for(int j=1;j<i;j++) { sum*=(a[j]-1); } cout<<sum*s/sum1<<endl;//套用欧拉函数公式 求出互质的数的个数 } int main() { a[0]=1; int n; while(cin>>n) { if(prime(n)) { cout<<n-1<<endl; }//如果是素数的话 那么除了它本身 其余所有的数都与它互质 else f(n); } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复