求助

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

wrk20111205 @ 2023-08-31 11:32:23

#include<bits/stdc++.h>
using namespace std;
int x,y,i,j;
int gcd(int i,int j)
{
    if(j==0)
    {
        return i;
    }
    else
    {
        return gcd(j,i%j);
    }
}
int lcm(int i,int j)
{
    return (i*j)/gcd(i,j);
}
int main()
{
    cin>>x>>y;
    for(i=1;i<=y;i++)
    {
        for(j=1;j<=y;j++)
        {
            if(gcd(i,j)==x&&lcm(i,j)==y)
            {
                cout<<i<<" "<<j<<endl;
            }
        }
    }
    return 0;
}

by wrk20111205 @ 2023-08-31 11:40:35

#include<bits/stdc++.h>
using namespace std;
int x,y,i,j,s=0;
int gcd(int i,int j)
{
    if(j==0)
    {
        return i;
    }
    else
    {
        return gcd(j,i%j);
    }
}
int lcm(int i,int j)
{
    return (i*j)/gcd(i,j);
}
int main()
{
    cin>>x>>y;
    for(i=1;i<=y;i++)
    {
        for(j=1;j<=y;j++)
        {
            if(gcd(i,j)==x&&lcm(i,j)==y)
            {
                s++;
            }
        }
    }
    cout<<s;
    return 0;
}

这个才是


by fight_for_humanity @ 2023-08-31 12:02:10

TLE优化一下就好了 做法: 将j(x*y)/i带掉,这样只用一层循环


|