三質數
三質數
時間限制:1s 空間:256M
題目描述:
一個數的約數也稱為因子,比如1是6的因子,2是6的因子,6是6的因子。質數只有兩個因子,1和它本身現在定義一種新的質數,三質數,三質數只有三個不同的因子。比如4是三質數,因為它有1,2,4三個因子。比如6不是三質數,因為6有1,2,3,6四個因子。現在有一些數,你需要判斷他們是不是三質數。
輸入格式:
第一行一個整數T,表示有T組測試數據。每組測試數據輸入一個整數n
輸出格式:
對於每組測試數據,判斷是否是三質數,如果是輸出YES,否則輸出NO
樣例輸入:
3
4
5
6
樣例輸出:
YES
NO
NO
約定:
1<=n<=1012,數據組數不超過103
解題分析
例如121:1,11,121 121隻有三個質數 121=112
由此可以看出素數的平方就是三質數,也就是說某數的平方根是素數,它就是三質數
程式碼如下
#include<bits/stdc++.h> using namespace std; int fzm(double l){ int k=(int)l; if(k<l){//判斷是否是小數 return 0;//是,就不是三質數 }else{//不是,那它有幾個因數 int temp=0; for(int i=1;i<=k;i++){ if(k%i==0){ temp++; } } return temp;//返回temp個因數 } } int main(){ int t=0; cin>>t; double n[t+1]={0}; for(int i=1;i<=t;i++){ cin>>n[i]; } for(int i=1;i<=t;i++){ double k=sqrt(n[i]);//平方根 int ans=fzm(k); if(ans==2){//判斷k是否是素數 cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } } }