6,7,8,10TLE,9WA求助

P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

TanJingWen2023 @ 2023-08-28 19:42:20

#include <iostream>
using namespace std;
//int l
int x, y;
int gcd(int a, int b)
{
    if (a % b == 0) return b;
    else return gcd(b, a % b);
}
int max(int a, int b)
{
    return a > b ? a : b;

}
bool pd(int a, int b)
{
    int l = gcd(a, b);
    int temp = a * b;
    temp = temp / l;
    if(l==x&&temp==y)
    return true;
    return false;
}
void doing()
{
    //int x, y;
    cin >> x >> y;
    int count_=0;
    if(pd(x,y))
    count_ += 2;
    int m = max(x, y)/2;
    for (int i = 1; i <= m; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (i != j &&i<j)
            {
                if (i<j&&pd(i, j))
                    count_ += 2;
            }
        }
    }
    cout << count_;
}
int main()
{
    doing();
    return 0;
}

这里我用的是辗转相除,为了省时间把最小公约数放在pd里面了,30行是为了判断本身符合情况,除以2是因为两个数可以反着来,所以count_+=2,小白才学一年不到非专业初一准备第一次NOIP


by TanJingWen2023 @ 2023-08-28 19:44:13

另外我是习惯把主要代码写在一个函数里的,因为老师说c++是面向对象吧(我不确定).


by TanJingWen2023 @ 2023-08-28 19:49:08

求大佬帮助!


by TanJingWen2023 @ 2023-08-28 19:50:35

超时都是1.2秒


by zhangshuhang2011 @ 2023-08-28 20:03:38

悬关吗


|