已经乱调了半天了只有80,求指点~\qwq/

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

peach3 @ 2024-08-20 18:07:34

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long x,y,m=2,n=0,a;
    cin>>x>>y;
    a=y/x;
    if(y%x==0){
        while(a>1){
            if(a%m==0){
                n++;
                while(a%m==0){
                    a=a/m;
                }   
            }
            m++;
        }
        if(n==1){
            cout<<n+1;
            return 0;
        }
        cout<<n*n<<endl;
    }
    else{
        cout<<0<<endl;
    }
    return 0;
}

by hyl_____ @ 2024-08-20 18:25:01

Hack:2 60060

true answer:64


by hyl_____ @ 2024-08-20 18:26:41

你的算法有问题,80分是碰巧得的,只能A某些数据


by peach3 @ 2024-08-20 18:29:08

@hyl_____ 已经把这个测试点下了,不知道咋办了......我朋友让我输出它的平方,结果只有80


by hyl_____ @ 2024-08-20 18:31:24

你可以参照这个程序,明白主要逻辑,不要直接抄,明白后自己写一遍

#include<bits/stdc++.h>
using namespace std;
int __lcm(long long a,long long b)
{
    return a/__gcd(a,b)*b;
}//__gcd()是系统自带最大公因数函数
//lcm()表示最小公倍数
//lcm*gcd=a*b
int main()
{
    long long x,y;
    cin>>x>>y;
    int con=0;
    for(long long i=x;i<=y;i++) 
    {
        double j=x*1.0/i*y;
//      cout<<i<<" "<<j;
        long long check=j;
        if(check==j&&__gcd(i,check)==x&&__lcm(i,check)==y) 
                con++;//判断j是不是整数和是否满足题目条件,是则累加
    }
    cout<<con;
    return 0;
}

by peach3 @ 2024-08-20 18:32:37

@hyl_____ ok,感谢大佬!


by hyl_____ @ 2024-08-20 18:33:47

直接输出平方应该是骗分策略,有些数据A不了,你可以参照暴力枚举的方式(如果不超时)

我的程序就是 O(y-x) 的复杂度


by wangmuze @ 2024-08-28 19:00:24

@hyl_____: 为什么输出平方能骗分??? 小蒟提问


by wangmuze @ 2024-08-28 19:07:38

为什么输出平方能骗分??? 小蒟提问 @hyl_____


by wangmuze @ 2024-08-28 19:09:25

为什么输出平方能骗分??? 小蒟提问 @hyl_____ 已关,求互关QwQ QwQ


by hyl_____ @ 2024-08-28 19:24:50

不知道,某种神奇的操作,让我想想 @wangmuze


| 下一页