29半素数

素数的定义
素数是指大于 1,且只能被本身和1 整除的正整数(只有1 和本身两个正因子)。例 如, 2, 11, 67, 89 都是素数,但 8, 20, 27 都不是素数。
半素数的定义
如果一个数能分解为两个素数的乘积,且大于 1,那么,这个数就是半素数。例如, 6=2× 3, 2 和 3 都是素数,那么, 6 就是半素数。 12 就不是半素数。 你的任务就是判断一个给定的数字是否是一个半素数。
2.输入描述
输入数据中有多个测试案例。每个案例只包含一个整数 N(2≤N≤1 000 000)。
3.输出描述
一个测试案例输出一行。如果这个数是半素数,则直接输出“Yes”,否则,输出“No”。
4.输入样例
3
4
6
12
5.输出样例
No
Yes
Yes
No 


#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<cmath>
#include<set>
#include<vector>
using namespace std;
vector<int> v;
set<int>s;
void pt(int a, int b)
{
	for (int i = a; i <= b; i++)
	{
		if (i!=2&&i % 2 == 0) continue;
		for (int j = 3; pow(j, 2) < i; j++)
		{
			if (i%j == 0) goto RL;
		}
		v.push_back(i);
	RL:continue;
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	
	ifstream fin("D:\\visual studio 2013 code\\test.txt");
	//建立2-1000000之间的素数集合
	pt(2, 100000);
	//建立2-1000000之间的半素数集合
	set<int>::iterator it;
	int temp;
	for (int i = 0; i < v.size(); i++)
	{
		for (int j = 0; j < v.size(); j++)
		{
			temp = v[i] * v[j];
			s.insert(temp);
		}
	}
	while (fin >> temp)
	{
		it=s.find(temp);
		if (it != s.end())
		{
			cout << "YES" << endl;
		}
		else
		{
			cout << "NO" << endl;
		}
	}
	
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值