• GCD


    题目传送门:

    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <cstdlib>
    #include <sstream>
    #include <iostream>
    #include <queue>
    #include <stack>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <functional>
    using namespace std;
    #define ll long long
    #define re register
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define P pair<int,int>
    void read(int &a)
    {
        a=0;
        int d=1;
        char ch;
        while(ch=getchar(),ch>'9'||ch<'0')
            if(ch=='-')
                d=-1;
        a=ch-'0';
        while(ch=getchar(),ch>='0'&&ch<='9')
            a=a*10+ch-'0';
        a*=d;
    }
    void write(int x)
    {
        if(x<0)
            putchar(45),x=-x;
        if(x>9)
            write(x/10);
        putchar(x%10+'0');
    }
    ll euler(ll x)
    {
        ll ans=x;
        if(x%2==0)
        {
            while(x%2==0)
                x/=2;
            ans/=2;
        }
        for(re int i=3;i*i<=x;i+=2)
        {
            if(x%i==0)
            {
                while(x%i==0)
                    x/=i;
                ans=ans/i*(i-1);
            }
        }
        if(x>1)
            ans=ans/x*(x-1);
        return ans;
    }
    int main()
    {
        int T;
        read(T);
        while(T--)
        {
            ll a,b;
            ll ans=0;
            scanf("%lld %lld",&a,&b);
            if(b==1)
            {
                printf("%lld
    ",a);
                continue;
            }
            for(re ll i=2;i<=sqrt(a);i++)
                if(a%i==0)
                {
                    if(i>=b)
                        ans+=euler(a/i);
                    if(a/i>=b)
                        ans+=euler(i);
                }
            int x=sqrt(a+0.5);
            if(x*x==a&&x>=b)///防止加两次
                ans-=euler(x);
            printf("%lld
    ",ans+1);///加上gcd(a,a)的情况,因为a>=b,所以不需要特判
        }
        return 0;
    }
  • 相关阅读:
    怎么看到数据库以前做过的日志?
    感觉很好的网站
    uview 滑动切换
    Flyweight享元(结构型模式)
    悟空,真的是空?
    Interpreter解释器(行为型模式)
    Proxy代理(结构型模式)
    [转]有一种爱叫索取
    Command命令(行为型模式)
    Composite组合(结构型模式)
  • 原文地址:https://www.cnblogs.com/acm1ruoji/p/10686769.html
Copyright © 2020-2023  润新知