超过65535的质因数按理不可能超过两个吧?请问一下程序修改
查看原帖
超过65535的质因数按理不可能超过两个吧?请问一下程序修改
148190
wyy20110310楼主2024/5/7 00:35

打表了65535以内的质数,

bool f;
int x,x1,imin,imax,num;
int fj[10000];

int main()
{
    memset(fj,0,sizeof(fj));
    cin>>x;
    x1=x;
    imin=0;imax=0;
    for(int i=1;i<=9592;i++)
    {
        while(x1%prime[i]==0)
        {
            if(imin==0)
                imin=i;
            fj[i]++;
            x1/=prime[i];
        }
        if(x1==1)
        {
            imax=i;
            break;
        }
    }
    if(imin==imax)
    {
        cout<<x<<endl;
        return 0;
    }
    f=false;
    num=0;
    if(x1!=1)
        num++;//////没有这一个if就错第19个点,认识到问题,但是加上这个if后第25个点会错,不理解
    for(int i=imin;i<=imax;i++)
    {
        if(fj[i]!=0)
            num++;
        if(fj[i]>1)
            f=true;
    }
    // cout<<imin<<" "<<num<<" "<<imax<<" "<<f<<endl;
    if(f==false)
    {
        if(num%2==0)
            cout<<1<<endl;
        else
            cout<<prime[imin]<<endl;
    }
    else
    {
        cout<<1<<endl;
    }
    return 0;
}

现在已经使用sqrt(n)的方法解决,但是不太能理解第25点为什么WA

2024/5/7 00:35
加载中...