题目简要:
这道题主要就是个筛素数的问题···
如果大于1的整数的正的除数(因子)为1,则称为质数。 例如,2,11,67,89是素数,但8,20,27不是。
半主数字定义
如果大于1的整数可以被分解为两个质数,则称为半质数。 例如,6是半质数,但12不是。
您的任务只是确定给定的数字是否是半质数。
输入
在输入中有几个测试用例。 每种情况包含单个整数N(2≤N≤1,000,000)
输出
每行一个整数。 如果数字是半质数,则输出“是”,否则输出“否”。
例如:
Sample Input
3
4
6
12
Sample Output
Yes
Yes
No
解题思路:
······好吧,我记得老师上课的时候提到过,不过具体的方法忘记了····无奈,用自己想到的办法总是超时,于是用了题解上的方法。先找出素数,再通过循环判断这个数是不是半素数就好啦。
附代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i,j;
vector <int> b;
for(int i=2;i<=500000;i++)
{
if(i!=2 && i%2==0)
continue;
for(int j=3;j*j<=i;j+=2)
{
if(i%j==0)goto p;
}
b.push_back(i);
p:continue;
}
set <int> s;
for (i=0;i<b.size();i++)
{
for (j=0;j<b.size();j++)
{
if (b[i]*b[j]<1000000)
s.insert(b[i]*b[j]);
else
break;
}
}
int n;
set<int>::iterator it;
while (cin>>n)
{
it=s.find(n);
if (it!=s.end())
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
解题感受:
其实还是没有太看懂课本上筛素数的方法,回去仔细研究去,可是后来我去网上找了百度百科里的筛素数的方法,我一开始想到的方法和百度的方法其实是一样的,然而解决不了超时的问题·····