检验“哥德巴赫”猜想

一、实验目的

实验目的:通过练习,熟练掌握循环语句和函数的应用

二、实验原理

哥德巴赫猜想:任何大于或者等于6的整数都可以写成两个素数之和。

要求:

1)  检验6-n(n>=6)之内的偶数

2)  每个偶数写成两个整数之和的形式 例:6=3+3 8=3+5  10=3+7 等,

三、主要数据结构和算法

1、数据结构的设计(写出构造的数据类型,即自己定义的结构体)

本实验没有用到自己定义数据类型

2、算法分析(算法用流程图或自然语言描述)

先用布尔类型构造判断是否为素数的函数,主函数内写输入n,在两个for循环内写

6~n之内每个偶数所分成的两个数,再调用布尔函数判断那两个数是否同时为素数,若同时为素数,则输出每个偶数写成两个整数和的形式;若两个数不全是素数,则跳出两个for循环输出Wrong.

四、实验结果及分析

1、源程序(见附录)

2、测试结果截图 写出测试程序的数据,至少写三组数据,并把每组测试结果截图)

(1)第一组测试数据及结果截图

N=6

(2)第一组测试数据及结果截图

N=10

(3)第一组测试数据及结果截图

N=16

五、心得体会(自己在编程过程中对语法,写代码风格,实验本身的理解,以及以后写程序注意的问题)

1.由于本程序先写的布尔函数构造的判断素数的函数,为了结构简明,将所有的变量设成全局变量

2.在不符合条件时,输出Wrong时应跳出两个for循环,否则会输出多个Wrong(本题并不会出现输出Wrong的情况)

3.调用函数判断两个数是否同时为素数,采用&&,简明

#include<stdio.h>
#include <stdbool.h>
int n,a,k,i,j;
bool su(int n)//构造判断是否为素数的布尔函数; 
{
    for(k=2;k<n;k++)
        if(n%k==0)break;
    if(k<n)
        return false;
    else
        return true;
}
int main()
{
    scanf("%d",&n);
    for(i=6;i<=n;i=i+2)
    {
        for(j=3;j<n;j++)
        {
            a=i-j;
            if(su(a)&&su(j))
            {
                    if(j<=a)
                    printf("%d=%d+%d\n",i,j,a);
                    break;//在符合条件的情况下,break保证只输出一种情况; 
            }
            
        }
    }
    if(!su(a)&&su(j))//跳出两个for循环,防止输出多个Wrong ; 
    {
        printf("Wrong!");
    }
    return 0;
}

 

posted @ 2021-05-31 09:21  烤山药护体  阅读(24)  评论(0编辑  收藏  举报