Disjoint Set of Common Divisors 分解质因子 +剪枝

传送门
思路:分解a和b最大公约数t的质因子即可,不断的约去t的质因子,最后注意判断t的质因子是否全部约去。
代码理论验证,关于为什么最后一定是一个素数,我觉得这个大佬分析的挺好的传送门

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
long long gcd(long long x, long long y)
{
    return y == 0 ? x : gcd(y, x % y);
}
int main()
{
    //ios::sync_with_stdio(false);
    long long a,b;
    scanf("%lld %lld",&a,&b);
    long long t = gcd(a, b);
    long long cnt = 1;
    long long lim = t;
    for(long long i = 2;i * i <= t;i++)
    {
        if(t % i == 0)
        {
            cnt++;
            while(t % i == 0)
            {
                t = t / i;

            }
        }
    }
    if(t > 1)
        cnt++;
    printf("%d\n",cnt);
    return 0;
}

发布了241 篇原创文章 · 获赞 8 · 访问量 4864

猜你喜欢

转载自blog.csdn.net/weixin_43960370/article/details/103291012