hdu 2588

题目给你 一个n和m 然后你要去求gcd(x,n)>=m的个数

保证1<=x<=m .

对于gcd(x,n)>=m可以看做是 gcd(x,n)=m,gcd(x,n)=m+1.....gcd(x,n)=n;   m必为n的倍数

也就是 gcd(x/m,n/m)=1 也就是n/m内和n/m互质的数的个数。

只要计算范围内的因子值的欧拉函数即可

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=1e5;
int n,prime[maxn],len=0;
int  phi[maxn];
void makepri()
{
    phi[1]=1;
    for(int i=2;i1) ans=ans/a*(a-1);
    return ans;
}
int main()
{
    makepri();
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        int en=sqrt(a),sum=0,k=a/b;
        //printf("k=%d\n",k);
        for(int i=1;i<=en&&i<=k;i++)
        {
            if(a%i==0)
            {
                if(i


你可能感兴趣的:(我只是菜逼——数论)