质数的后代

来源:互联网 发布:办公软件学习教程 编辑:程序博客网 时间:2024/04/29 16:28

1227: 算法提高 质数的后代

时间限制: 1 Sec  内存限制: 256 MB
提交: 5  解决: 2
[提交][状态][讨论版]

题目描述

在上一季里,曾提到过质数的孤独,其实从另一个角度看,无情隔膜它们的合数全是质数的后代,因为合数可以由质数相乘结合而得。
如果一个合数由两个质数相乘而得,那么我们就叫它是质数们的直接后代。现在,给你一系列自然数,判断它们是否是质数的直接后代。

输入

第一行一个正整数T,表示需要判断的自然数数量
接下来T行,每行一个要判断的自然数

输出

共T行,依次对于输入中给出的自然数,判断是否为质数的直接后代,是则输出Yes,否则输出No

样例输入

4
3
4
6
12

样例输出

No
Yes
Yes
No

提示


数据规模和约定



1<=T<=20

2<=要判断的自然数<=105

来源

#include<iostream>#include<string.h>#include<math.h>using namespace std;int main(){int primer[100005]={0},i,j,k=0,a[100005]; primer[0]=1;primer[1]=1;for(i=2;i<100005;i++)//筛法求素数 {  if(primer[i]==1) continue;//减少耗时  else  {  for(j=i+i;j<100005;j+=i)  {      if(j%i==0) primer[j]=1;  } }   }for(i=0;i<100005;i++){if(primer[i]==0)     a[k++]=i;}int n,m,flag=0;cin>>n;while(n--){flag=0;cin>>m;for(i=0;i<k;i++){   for(j=0;j<k;j++)   {     if(a[i]*a[j]==m)      {   cout<<"Yes"<<endl;  flag=1;  break;    }  if(a[i]*a[j]>m)//减少耗时       break;   }   if(a[i]>m) break;//减少耗时   if(flag==1)     break; }   if(flag==0)    cout<<"No"<<endl;}return 0;}


[提交][状态]
0 0
原创粉丝点击