使用函数验证哥德巴赫猜想-CSDN博客

183 阅读1分钟
D. 实验6-6 使用函数验证哥德巴赫猜想
题目描述

本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。

输入两个正整数m和n(0<=m<=n<=100),将m和n之间的偶数表示成两个素数之和,输出时每行显示5组。要求定义并调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。


输入

两个正整数m和n(0<=m<=n<=100)


输出

见样例


样例查看模式 
正常显示
查看格式
输入样例1 
89 100
输出样例1
90=7+83, 92=3+89, 94=5+89, 96=7+89, 98=19+79
100=3+97, 

这里我觉得值得注意的点有两个

首先在写ji_pr()函数(这个函数主要求出拆成两个奇素数后的第一个数是最小时)时我做了一点小优化,要求的是奇素数,所以我们从3开始,并且每次+2  ,而且当j>i/2时的情况与j<=i/2的情况是一样的,我们不必再算一次。

其次,最后输出时的格式是我觉得更值得我们反复琢磨的!!!!!!!!!!!

#include<math.h>
#include<stdio.h>
int prime(int m)
{
	int i, l;
	if (m == 1)
		return 0;
	if (m == 2)
		return 1;
	l = sqrt(m) + 1;
	for (i = 2; i <= l; i++)
	{
		if (m % i == 0)
			return 0;
	}
	return 1;
}


int ji_pr(int i)
{
	int j;
	for (j = 3; j <= i / 2; j += 2)
	{
		if (prime(j) && prime(i - j))
		{
			return j;
			break;
		}
	}

}

#include<stdio.h>
int main()
{
	int m, i, n, count = 0;
	scanf("%d %d", &m, &n);
	
		for (i = m; i <= n; i++)
		{
			if (i >= 6)
			{
			if (i % 2 == 0)
			{
				count++;
				printf("%d=%d+%d", i, ji_pr(i), i - ji_pr(i));
				if (count < 5)
					printf(", ");
			}
			if (count == 5)
			{
				printf("\n");
				count = 0;
			}
			}


		}
	


	return 0;
}