求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;
} 

嗷吼,那么各位宝,写代码的时候别忘了主函数,不然“帅”老师会被气哭。别问我怎么知道的……

Guess you like

Origin blog.csdn.net/m0_46672781/article/details/120495248