使用函数验证哥德巴赫猜想:任何一个不小于 6 的偶数均可表示为两个奇素数之和

标签: 基础算法题

引入

使用函数验证哥德巴赫猜想:任何一个不小于 6 的偶数均可表示为两个奇素数之和。例 如 6=3+3,8=3+5,…,18=5+13。将 6~100 之间的偶数都表示成两个素数之和,打印时 一行打印 5 组。试编写相应程序。


分析

任何一个不小于 6 的偶数均可表示为两个奇素数之和。

  • 第一步:需要一个循环循环区间

  • 第二步:循环奇数,并且判断该奇数是否为素数,如果为素数求相加等于该偶数两个奇素数(可能是多个),并且每隔5个换行

      我们可以把求是否为素数的函数独立出来
    

代码

#include <stdio.h>

int prime(int m);

int main(){
	
	/**
	使用函数验证哥德巴赫猜想:任何一个不小于 6 的偶数均可表示为两个奇素数之和。
	例 如 6=3+3,8=3+5,…,18=5+13。将 6~100 之间的偶数都表示成两个素数之和,打印时 一行打印 5 组。试编写相应程序。 
	*/
	
	/**
	分析:
	任何一个不小于 6 的偶数均可表示为两个奇素数之和。
	需要一个循环循环区间
	循环奇数,并且判断该奇数是否为素数,如果为素数求该偶数两个奇素数,并且每隔5个换行 
	*/
	
	//这里我们的m、n的值已经给定了,当然也可以自己输入 
	int i, m = 6,n = 100,count;
	
		//循环区间,都是偶数所以 m+=2 
		for(; m <= n; m+=2){
			//初始化i=3,最小奇素数是3 
			for(i = 3; i <= m; i+=2){
				 //奇数不一定为素数,所以需要判断 
				if(prime(i) && prime(m-i)){
					printf("%d=%d+%d ", m,i,m-i);
					count++;
					if(count%5 == 0){
						printf("\n");
					}
				}	
			}	
		}
	return 0;
} 

int prime(int m){
	//只有1和它本身能被其整除,1不是素数,2是素数
	int i;
	if(m == 1){
		return 0;
	}else if(m == 2){
		return 2;
	}else{
		for(i = 2; i < m; i++){
			if(m%i == 0){
				return 0;
			}
		}
		return m;
	}	
} 

运行测试

在这里插入图片描述


版权声明:本文为qq_42977003原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42977003/article/details/106437710