题解:#6363.耀眼的质数 审核通过

lyh069 维什戴尔 2025-08-11 22:27:21 11

本人蒟蒻,请奆佬高抬贵手

纯水题,我这种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;
} 
{{ vote && vote.total.up }}