#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
ll n,m;
ll Gcd(ll a,ll b){
return b==0?a:Gcd(b,a%b);
}
ll Eoul(ll n){
ll res=n;
for(int i=2;i<=n/i;i++){
if(n%i==0){
res=res/i*(i-1);
while(n%i==0){
n/=i;
}
}
}
if(n>1){
res=res/n*(n-1);
}
return res;
}
int main(){
int t;
cin>>t;
while(t--){
cin>>n>>m;
ll res=0;
for(int i=2;i<=sqrt(n);i++){
if(n%i!=0){
continue;
}
if(i>=m&&i*i<n){
res+=Eoul(n/i);
}
if(n/i>=m){
res+=Eoul(i);
}
}
cout<<res+1<<endl;
}
return 0;
}
HDU2588
最新推荐文章于 2024-09-21 14:48:47 发布
这篇博客主要介绍了如何使用C++实现计算欧拉函数Eoul和求最大公约数Gcd的算法。在主函数中,程序读取输入的整数n和m,然后对于每个2到sqrt(n)之间的数i,检查n是否能被i整除,如果可以则计算并累加欧拉函数的结果。最后输出结果。文章涉及的主要算法包括欧拉函数的计算和基于辗转相除法的最大公约数求解。
摘要由CSDN通过智能技术生成