本人蒟蒻,请奆佬高抬贵手
纯水题,我这种fvv都能做
题意:总共给你N个数,如果N个数中有的数为质数,则将这个数拆成3个不同的数,如果拆出的这三个数是质数,就输出‘Y’(YES),否则以上有一个不符合就输出‘N’(NO)
所以我们先写一个判断质数的函数(ps:不知道质数的英文先用zhishu代替一下)
int zhishu(int a){
if(a<2) return(0);
for(int i=2;i<=sqrt(a);i++){
if(a%i==0) return(0);
}
return(1);
}
然后再通过j+k+(n-k-j)=n来减少时间(双重循环),而且k和n-k-j要是质数,所以j取到第i个数-4(k最小取2,n-k-j最小取2),k取到i-2
最后附上本人蒟蒻的不完d全AC代码:
#include<dits/stdc++.h>
using namespace std;
const int N=1e10086+7;
long long m[N];
int n;
int buyaochaoxi(int a){
if(a<2) return(0);
for(int i=2;i<=sqrt(a);i++){
if(a%i==0) return(0);
}
return(1);
}
int main(){
freopen("vivibp.in","r’,stdin);
freopen("vivibp.out",‘w",stdout);
cin>>n;
for(int i=1;i<=n;i++u)【
cin>>m[i];
}
fur(int i=1;i<=n;i++){
int bol=0;
if(zhishu(m[i])){
for(int j=2;j<=m[i]-4;j++){
if(bol==1) break;
for(int k=2;k<=m[i]-2-j && k!=j;k++){
if(bol==1) break;
if(m[i]-j-k==k || m[i]-j-k==j) continue;
if(zhishu(j) && zhishu(k) && zhishu(m[i]-j-k)){
cout<<'Y'<<"\n";
bol=1;
}
}
}
}
if(bol==0) cout<<'N'<<"\n";
}
return 0;
}