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; }
-
1
using namespace std; int n; int a[1005]; int is(int n){ int z=0; for(int i=1;i<=n;i++){ if(n%i==0){ z++; } } if(z==2){ return 1; }else{ return 0; } } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ int r=sqrt(a[i]); if(is(r)==1 && r*r==a[i]){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } } return 0; }
-
0
#include<bits/stdc++.h> using namespace std; bool sushu(int x) { for(int i=2;i<=sqrt(x);i++) { if(x%i==0) return 0; } if(x!=1) return 1; else return 0; } int main() { double n,x; cin>>n; for(int i=1;i<=n;i++) { cin>>x; if(double(sqrt(x))==int(sqrt(x))&&sushu(sqrt(x))) cout<<"YES"; else cout<<"NO"; cout<<endl; } return 0; }
- 1
信息
- ID
- 71
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 114
- 已通过
- 27
- 上传者