holiday/8.16/I-GCD/I-GCDreference.cpp

38 lines
749 B
C++
Raw Normal View History

2022-08-18 08:24:59 +08:00
#include<cstdio>
using namespace std;
int Euler(int n){
int m=n;
for(int i=2;i*i<=n;i++){
if(n%i==0)//<2F><>һ<EFBFBD><D2BB><EFBFBD>ҵ<EFBFBD><D2B5>ı<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
m-=m/i;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> i,2i,3i,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,(m/i)*i
while(n%i==0)
n/=i;//<2F>Ѹ<EFBFBD><D1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>Լ<EFBFBD><D4BC>
printf("(%d:%d)",i,m);
}
}
if(n>1) //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ȸ<EFBFBD><C8B8><EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n
m-=m/n;
return m;
}
int main(){
int T;
scanf("%d",&T);
int N,M;
while(T--){
scanf("%d%d",&N,&M);
long long sum=0;
for(int i=1;i*i<=N;i++){//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD>ʡʱ<CAA1><CAB1>
if(N%i==0){
if(i>=M) sum+=Euler(N/i);//iΪN<CEAA><4E>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>1<=i<=<3D><><EFBFBD><EFBFBD>n<EFBFBD><6E>
if((N/i)!=i&&(N/i)>=M) sum+=Euler(i);//(N/i)<29><>N<EFBFBD><4E>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>(N/i)>=<3D><><EFBFBD><EFBFBD>N
printf("%d:%d\n",i,sum);}
}
printf("%lld\n",sum);
}
return 0;
}