验证哥德巴赫猜想:任一充分大的偶数,可以用两个素数之和表示。
#include<stdio.h>
#include<stdlib.h>
int main()
{int n, p, q; //n 是偶数,并将它分成 p,qint flagp, flagq, j; //p,q 为素数时,flag = 1; j在循环时使用 p = 1; //之所以不让 p = 0;是因为 1 不是素数,编程完毕之后可以比较一下两者的区别//输入一个偶数 nprintf("请输入一个偶数:"); //提示输入scanf("%d", &n); //输入 n//判断 n 是否为偶数,且大于3if (n<4 || n%2!=0) //或者n % 2 == 1; 但不要写成赋值 = {printf("Input data error!\n"); //提示输入错误 exit(-1); //程序结束。添加 #include<stdlib.h> } //判断 p,q 是否是素数 do{p++; //此时 p 从 2 开始循环q = n-p;flagp = 1; //假设 p 是素数 //判断 p 是否为素数for (j=2; j <= sqrt(p); j++) //sqrt();函数是求一个数的平方根,添加 #include<math.h>{if(0 == p % j) //素数的因数只有 1 和它本身 {flagp = 0; //不是素数,改变 flagp 的值 break; //退出 for 循环 } }flagq = 1;//判断 q 是否为素数for (j=2; j <= sqrt(q); j++) {if(0 == q % j) /*不写成 q % j == 0; 是因为 0 == q % j 中,如果 == 写成 = ,会变成bug,可以报错*/{flagq = 0;break;} }} while(flagq * flagp == 0); //首先 flag = 1,否则 do while 循环无法结束 //输出 n, p. qprintf(" n = p + q\n");printf("%4d =%4d +%4d\n", n, p, q);return 0;
}
下面进行编程时的错误总结:
(1)一开始令 flagq 和 flagq 等于0,然后 q,p 不为素数时,flag = 1;
因为while(flagq * flagp == 0);所以如果两个数为素数,循环还会继续,无法退出循环。
正确的写法:先 flag = 1; 若不是素数,则 flag = 0;只要 p,q 中有一个不是素数,则循环继续。
(2)一开始令 p = 0;
那么输入 8,会得到 8 = 1 + 7,然而 1 不是质数(素数)。
质数的定义:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
正确的写法:p = 1;
判断素数的代码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{int i, n; // i 为循环所用, n 为一个数int flag, j; //flag 判断是否为素数 , j 为输入 n 的次数 printf("Input an integer:"); //提示输入 n scanf("%d", &n); //输入 n// n 要大于 1,且如果输错 3次以上,程序结束j = 0;while (n<2){j++;if(j>2) {printf("输入错误超过上限,程序结束!\n");exit(-1);}printf("Input data error!\n");printf("Input another integer:");scanf("%d", &n);} //判断 n 是否为素数flag = 1;for (i=2; i <= sqrt(n); i++) {if(0 == n % i){printf("This is not prime.\n");flag = 0;break;}}if (flag == 1)printf("This is prime.\n");return 0;
}
验证哥德巴赫猜想:任一充分大的偶数,可以用两个素数之和表示。相关推荐
- 验证哥德巴赫猜想:任何一个大于等于6的偶数均可表示为两个素数的和。如6=3+3,8=3+5,,18=5+13。试编写程序,要求将输入的一个偶数表示成两个素数之和。 输入输出样例如下:
验证哥德巴赫猜想:任何一个大于等于6的偶数均可表示为两个素数的和.如6=3+3,8=3+5,,18=5+13.试编写程序,要求将输入的一个偶数表示成两个素数之和. 输入输出样例如下: 98 98 = ...
- [C]验证哥德巴赫猜想(输入一个偶数始终等于两个素数之和,附个人编写的代码)
验证哥德巴赫猜想 思路 注意 C语言代码实现 思路 问题是:任意输入一个偶数,始终找到两个和为该偶数的素数. 我们要解决的问题是,通过算法来找到符合的两个素数. 我们拆分一下该问题要解决的事情: ** ...
- Java用(函数)方法验证哥德巴赫猜想(Goldbach)(一个偶数一定等于两个素数之和)本题以100以内的偶数为例
public class function2 { //记得修改文件名或类名public static void main(String[] args) {// TODO Auto-generated ...
- python偶数分解成两个素数之和_偶数 2021218918 ,有多少种方法分解成两个素数之和?...
对于上面问题2N=2021218918,满足"p+q=2N"的素数对(p,q)的个数真值为3289208个.下面对这个值进行理论探求分析,请大家不吝赐教! 下面先来进行基于小素数因 ...
- PHP验证歌德巴赫猜想:一个充分大的偶数(大于或等于6)可以分解为两个素数之和。编写程序,将6至50之间全部偶数表示为两个素数之和。
- 【算法】验证哥德巴赫猜想
问题来源 Timus Online Judge 网站上有这么一道题目:1356. Something Easier.这道题目的输入是一组 2 到 109 之间整数,对于每个输入的整数,要求用最少个数 ...
- (c语言)使用函数验证哥德巴赫猜想
题目描述 本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和.素数就是只能被1和自身整除的正整数. 输入两个正整数m和n(0<=m& ...
- c语言表示哥德巴赫猜想,用C语言来验证哥德巴赫猜想(定义的是int型)
哥德巴赫猜想: 如果任意一个大于6的偶数都可以写成两个素数之和.就将其称为符合哥德巴赫猜想. #include #include /// /// 判断一个数是否是素数 /// /// 要判断的数 // ...
- c语言一个偶数用两个素数表示,用java怎样编写一个偶数总能表示为两个素数之和的程序...
我这有一个程序,是验证6到1000内所有数都可以用两个素数之和表示,不过程序是用c语言写的,java我们还没学呢,不知道这程序对你是否有用,你自己先看看吧#include<stdio.h> ...
- 将一段区间的偶数分解为两个素数相加(Java)
从键盘接收任意两个正整数,要求第一个正整数必须小于第二个正整数.然后把这两个数范围之内(包括这两个数)的所有偶数分解为两个素数之和,并输出每个偶数以及对应的两个素数 方法一 package day05 ...
最新文章
- she's the one
- RIP(Routing Information Protocol)精析04
- python中打印zip()函数结果和zip()函数的使用
- c++ 继承机制易犯的错误
- Mercurial黄昏,Bitbucket宣布全面转向Git
- Java9都快发布了,Java8的十大新特性你了解多少呢?
- 计算机英语audios啥意思,2020考研英语词汇:audio是什么意思
- java生成pdf417_生成PDF417的JAVA包.rar
- Linux中安装开源JDK(windows的JDK只能安装半开源)
- objective-c block 讲解
- vector java 复制_Java代码性能优化的 40+ 细节
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- wait放弃对象锁_Java线程:notify()和wait()示例
- 如何使用JavaScript来判断用户设备类型
- 优秀开源音乐项目---落雪音乐软件(免费听歌下载歌曲)
- plotly绘制3D图技巧
- python分离arw与jpg图片
- tf.contrib
- php 解析pathinfo 类
- 2021年中国柠檬茶行业发展概况及行业发展趋势分析[图]