C++哥德巴赫猜想

哥德巴赫猜想


任一大于2的偶数都可写成两个素数之和

首先,对于这个问题我们应该一步一步分析
题目中有三个元素:偶数两个素数
偶数可以直接由用户输入,那么我们的问题就是寻找两个素数
寻找两个素数又可以分解为—> 两个数 && 为素数

既然是两个数,那么我们自然而然地就要用两个for循环来写
那么这两个数有什么范围呢?

1这两个数必然小于偶数的大小
2素数>=2

循环的框架搭好了,那内部的就自然而然好写了
首先要判定第一个数是否为素数,如果为素数的话才能进行下面的循环
进入内部循环后
输出结果的条件则变为 第二个数为素数 && 素数1+ 素数2 == 输入的偶数


最终代码如下:

#include <iostream>
using namespace std;

//声明函数
int prime(int);

int main()
{
	int x;//输入偶数
	cin >> x;

	for (int i = 2; i < x; i++)
	{
		//判断第一个数是否为素数
		if (prime(i) == 1)
		{
			for (int j = 2; j < x; j++)
			{
				//判断第二个数是否为素数 且 满足两数之和为偶数x
				if ((prime(j) == 1) && (i + j == x))
				{
					//满足,输出两个素数
					cout << i << "\t" << j<<endl;
				}
			}
		}
	}
	return 0;
}

//判断素数
//此处也可设置为布尔类型
int prime(int n)
{
	for (int i = 2; i < n; i++)//可以把 n 换成 sqrt(n) 以减少运算
	{
		if (n % i == 0)// n可以整出除1和本身的数(不为素数)
			return 0;//返回 0 函数结束
	}
	return 1;//循环顺利结束,n为素数,函数结束
}

猜你喜欢

转载自blog.csdn.net/shaxiu0213/article/details/103204351