60pts,爆搜双层枚举TLE了6,7,8,10四个点,求助
查看原帖
60pts,爆搜双层枚举TLE了6,7,8,10四个点,求助
817312
byh_sys楼主2022/11/20 19:16

蒟蒻代码,不喜勿喷 思路:先双层 for 循环枚举两个数,用 gcd 求出两数的最大公约数,根据两数之积等于最小公倍数乘以最大公约数算出可行解并计数。可能是 for 循环还可以再优化但是蒟蒻不知道咋优化了……求助

#include<bits/stdc++.h>


using namespace std;

long long gcd(int x,int y)//求最大公约数
{
    if(y)
    {
        return gcd(y,x%y);
    }
    else return x;
}

int main()
{
    int x,y;
    cin >> x >> y;
    long long p,q;
    int cnt = 0;
    for(int i=0;i<x+y;i++)
    {
        for(int j=0;j<x+y;j++)//双层遍历
        {
            if(gcd(i,j) == x && i*j==x*y) cnt ++;//求同时满足最大公约数最小公倍数
        }
    }
    cout << cnt << endl;
    return 0;
}
2022/11/20 19:16
加载中...