3 条题解

  • 4
    @ 2022-7-26 13:04:44

    这道题的核心在于要明白一件事,只有平方数的约数才会是奇数个。像4有1,2,4三个约数;16有1,2,4,8,16五个约数,为什么呢?

    正常情况下,约数成对出现,q=n*k,而平方数有一对约数是相等的,固会有奇数个约数。

    设你要判断是否是"三质数"的数为q,那么首先q应该是平方数。一种用for枚举,一种用sqrt(),不过sqrt()在类型处理上会有点麻烦,我就选择用for了。

    n=sqrt(q),当n为质数(素数)时,q会是"三质数",原理不难,见下:

    若n为质数,则n=1n; q=1n1n; q=1nn q也就只会有1,n,n^2(q)三个质数了

    在最后附上代码: !不要直接复制粘贴! 对你毫无帮助

    #include<bits/stdc++.h>
    using namespace std;
    int t,q;
    //判断质数 
    bool check(int x)
    {
    	for(int i=2;i<=x/i;i++)
    	{
    		if(!(x%i)) return false;
    	}
    	return true;
    }
    int main()
    {
    	cin>>t;
    	for(int i=1;i<=t;i++)
    	{
    		int flag=0;
    		cin>>q;
    		if(q==1)
    		{
    			cout<<"NO"<<endl;
    			continue;
    		}
    		for(int j=1;j<=q/j;j++)
    		{
    			if(j*j==q && check(j))
    			{
    				cout<<"YES"<<endl;
    				flag=1;
    				break;
    			}
    		}
    		if(flag==0) cout<<"NO"<<endl;
    	}
    	return 0;
    }
    

    信息

    ID
    71
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    114
    已通过
    27
    上传者