2098 分拆素数和

#include<iostream>
using namespace std;

bool eros(int m)
{
	bool flag = 1;
	for (int i = 2;i<=sqrt(m);++i)//因为如果一个数不是素数是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现
	if (m%i == 0)
	{
		flag = 0;
		break;
	}
	return flag;
}
int main()
{
	int n;
	while (cin >> n)
	{
		if (n == 0)
			break;
		int sum = 0;
		for (int i = 3; i < n / 2; i=i+2)
		{
			int j = n - i;
			if (eros(i) == 1 && eros(j) == 1)//n本身是偶数,如果从2开始,那么j必定偶数,必然无法分拆成两个素数和,故从3开始,而且用i=i+2,加1的话直接得偶数,必然不是素数,不和题意
				sum++;
		}
		cout << sum << endl;
	}
	return 0;
}

刚开始超时了,做了两个修改,为程序中两个注释的位置。


质数
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。
最小的素数是2, 它也是唯一的偶素数。 最前面的素数依次排列为:2,3,5,7,11,13,17,19, 23, 29, 31......

合数
比1大但不是素数的数称为合数。
1和0既非素数也非合数。
自然数中除能被1和本数整除外,还能被其他的数整除的数。
如:6能被1和6整除,也能被2和3整除。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值