3 条题解
-
4
这道题的核心在于要明白一件事,只有平方数的约数才会是奇数个。像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
- 上传者