***这道题其实就是一个欧拉函数***
分解质因子部分
for(i=2; i<=n; i++) { while(n%i==0) { n/=i; printf("%d%c", i, n==1 ? ‘\n‘ : ‘ ‘); } }
快速求素因子,这个代码比上一个稍微快一点
for(i=2; i*i<=n; i++) { while(n%i==0) { n/=i; printf("%d ", i); } }
if(n>1) printf("%d", n);
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<cctype> #include<queue> #include<vector> #include<algorithm> using namespace std; typedef long long LL; #define N 100010 #define INF 0x3f3f3f int main() { int T, n, f, ans; scanf("%d", &T); while(T--) { scanf("%d", &n); ans=n; for(int i=2; i*i<=n; i++) { f=-1; while(n%i==0) { f=i; n/=i; } if(f!=-1) ans=ans*(i-1)/i; } if(n>1) ans=ans*(n-1)/n; printf("%d\n", ans); } return 0; }
时间: 2024-10-10 16:57:05