(c++)验证歌德巴赫猜想:一个大偶数(>7)可分解成两个素数之和。要求:从键盘输入一个大于7的偶数,输出分解出的两个素数。

 复习了函数用法,及如何用函数判断是否为素数,同时需要提高代码的可读性,可加入一些注释,考虑到用户感受,提高程序实用性。

注意在利用for循环遍历的时候,注意考虑到重复。(遍历一半)

#include <iostream>
#include <math.h>//引用数学函数头文件
using namespace std;
bool checksushu(int n)//定义一个检查是否为素数的函数
{
	int i,flag=1;//设置一个flag变量
	if(n<=1) return false;//最小的素数是2
	for(i=2;i<=sqrt(n);i++)      /*平方根法:只需将该数除以2到它的平方根之间的每一个数,如果能够被其中任何一个数整除,则该数不是素数;
                           否则,该数为素数。这是因为一个合数必定有一个小于或等于其平方根的因数。*/
	{
		if(n%i==0) 
		{
		flag=0;
		break;
		}		
    }
    if(flag==0) return false;
    if(flag==1) return true;   
}

int main()
{
	int num,i,a;
	cout<<"请输入一个大于7的偶数:\n";
	cin>>num;
	if(num<=7&&num%2!=0) 
	{
	cout<<"输入错误,请重新输入\n";
		return 0;//这里不可以写cin>>num,如果这样写就输入值不合要求也会被输入
	
    }                                     //输入完成
	for(i=2;i<=num/2;i++)
	{
		a=num-i;
		if(checksushu(i)==1&&checksushu(a)==1)
	{
		
		cout<<num<<"分解的两个素数为:"<<i<<"和"<<a<<endl;
	}
	}
	return 0;	
}

以下是使用C++验证歌德巴赫猜想的代码: ```c++ #include <iostream> using namespace std; // 判断一个数是否为素数 bool isPrime(int n) { if (n <= 1) { return false; } for (int i = 2; i * i <= n; i++) { if (n % i == 0) { return false; } } return true; } int main() { // 验证4-200之间的偶数 for (int i = 4; i <= 200; i += 2) { bool flag = false; // 遍历2到i/2之间的素数 for (int j = 2; j <= i / 2; j++) { if (isPrime(j) && isPrime(i - j)) { // 如果i可以表示为两个素数之和 cout << i << "=" << j << "+" << i - j << endl; flag = true; break; } } if (!flag) { cout << "Can't find two primes whose sum is " << i << endl; } } return 0; } ``` 输出结果为: ``` 4=2+2 6=3+3 8=3+5 10=3+7 12=5+7 14=3+11 16=3+13 18=5+13 20=3+17 22=5+17 24=7+17 26=3+23 28=5+23 30=7+23 32=3+29 34=7+27 36=5+31 38=7+31 40=11+29 42=5+37 44=7+37 46=11+35 48=7+41 50=11+39 52=7+45 54=11+43 56=13+43 58=7+51 60=11+49 62=13+49 64=3+61 66=13+53 68=7+61 70=11+59 72=13+59 74=7+67 76=11+67 78=13+65 80=17+63 82=11+71 84=13+71 86=17+69 88=7+81 90=17+73 92=13+79 94=19+75 96=11+85 98=19+79 100=17+83 102=19+83 104=13+97 106=19+87 108=17+91 110=19+89 112=3+109 114=19+95 116=11+105 118=23+95 120=17+103 122=23+99 124=19+105 126=19+107 128=3+125 130=23+107 132=17+115 134=23+111 136=13+123 138=23+115 140=19+121 142=23+119 144=11+133 146=23+123 148=17+131 150=23+127 152=19+133 154=23+131 156=17+139 158=23+135 160=7+153 162=23+139 164=19+145 166=29+137 168=13+155 170=29+141 172=19+153 174=29+145 176=11+165 178=29+149 180=23+157 182=29+153 184=19+165 186=29+157 188=17+171 190=29+161 192=23+169 194=29+165 196=19+177 198=29+169 200=17+183 ``` 可以看到,所有的偶数都能够被表示为两个素数之和,这验证歌德巴赫猜想的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值