求0-1000所有的任意三个素数之和仍是素数的计算式
Posted 勇敢*牛牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求0-1000所有的任意三个素数之和仍是素数的计算式相关的知识,希望对你有一定的参考价值。
任意三个素数之和仍是素数
- 题目描述:
求0-1000所有的任意三个素数之和仍是素数的用例;
(用三个for循环)
例如
……
- 代码思路:
首先我可以写一个功能最简单的函数(这个函数专门用来判断是否为素数)
函数功能描述:设置一个名为fun的函数,返回值为int类型,形参列表为 int n,这里的n就是我要判断的数。
int fun(int n){
……
}
说点人话就是:这个函数如果判断是素数我就返回这个数字本身,如果这个传入的数字n不是素数,我就返回0。
int fun(int n){
if(n == 1 || n ==0){
return 0;
}
if(n==2||n==3){
return n;
}
int i;
for(i=2;i<n;i++){
if(n%i == 0){
return 0;
}
}
return n;
}
其次在写一个函数,用来干啥呀???,你想我上面这个函数 fun() 只能用来完成一个判断功能,那按照题目要求还剩下两个步骤(1、把所求额素数放到数组中,2、任意三个素数相加还是素数的公式列出来)是不是!!
那好办,我通过这个函数把符合条件的先全部放入到数组中去。且看下面主函数中的代码。
int main(){
int array[1000]={0};
int i=0,j=0;
for(i=0;i<1000;i++){
if(fun(i)){
array[j++] = i;
printf("%d \\t",array[j-1]);
//读者可自行思考此处的array数组下标为何要j-1,懂了打在评论区哟。
}
}
return 0;
}
以上就已经可以完成了这道题的3分之2,在加把油,争取拿下他。到了最关键的一步了兄弟们“如何将三个素数任意相加得到又是一个素数呢?”
兄弟们你们发现了嘛,这句话分两步走就特别easy了,咋写程序就千万不能一口吃个大胖子吧,慢慢来。
先把写个功能函数void fun_1(int array[],int x),他首先是用来干甚么滴,哎,其实就是说我传入一个素数数组,然后呢,在传入一个这个素数数组里面有多少个素数元素int x,就妥了。具体是怎么实现三个数字任意相加呢,三重for循环一一枚举咯。(看到这里别怕,思考不来就先照着敲,往下看注释你就懂了或者想一想双重for循环遍历二维数组)
void fun_1(int array[],int x){
int i=0,j=0,k=0;
//临时变量,让代码写的好看一点,读者也可以换掉,因为在if判断语句写的有点长,就这三个变量取代了,问题不大,我在评论区补一个取掉i,j,k的
int a,b,c;//数组下标
for(a=0;a<x;a++){
i=array[a];
//我得让数组元素移动起来吧,那就得每次移动数组下标a++,以此类推
for(b=0;b<x;b++){
j=array[b];
for(c=0;c<x;c++){
k=array[c];
if(fun(i+j+k)){
//如果这三个数加起来又满足这个素数条件(通过fun函数检验),咋们就给他输出一下啊
printf("%d+%d+%d=%d\\n",i,j,k,fun(i+j+k));
}
}
}
}
}
- 总代码描述:
- 直接复制在IDE里就能用
#include<stdio.h>
int fun(int n){
if(n == 1 || n ==0){
return 0;
}
if(n==2||n==3){
return n;
}
int i;
for(i=2;i<n;i++){
if(n%i == 0){
return 0;
}
}
return n;
}
void fun_1(int array[],int x){
int i=0,j=0,k=0;//临时变量
int a,b,c;//数组下标
for(a=0;a<x;a++){
i=array[a];
for(b=0;b<x;b++){
j=array[b];
for(c=0;c<x;c++){
k=array[c];
if(fun(i+j+k)){
printf("%d+%d+%d=%d\\n",i,j,k,fun(i+j+k));
}
}
}
}
}
int main(){
int array[1000]={0};
int i=0,j=0;
for(i=0;i<1000;i++){
if(fun(i)){
array[j++] = i;
printf("%d \\t",array[j-1]);
}
}
//fun_1(array,j);最终答案就出炉咯
fun_1(array,20);//测试的太多了,我就先判断前20个吧
return 0;
}
嗷吼,那么各位宝,写代码的时候别忘了主函数,不然“帅”老师会被气哭。别问我怎么知道的……
以上是关于求0-1000所有的任意三个素数之和仍是素数的计算式的主要内容,如果未能解决你的问题,请参考以下文章