精华内容
下载资源
问答
  • //将一个数写成四个素数和的形式: //思路: //根据判断一个数是否可以写成两个质数的和的形式 的思路去解决。 //当一个数小于8时,Impossible,因为8为2+2+2+2最小的四个数的和。 //根据歌德巴赫猜想 一个偶数...

    这道题目中 把Impossible中的.给忘了 悲催

    //将一个数写成四个素数和的形式:
    //思路:
    //根据判断一个数是否可以写成两个质数的和的形式 的思路去解决。
    //当一个数小于8时,Impossible,因为8为2+2+2+2最小的四个数的和。
    //根据歌德巴赫猜想 一个偶数(本题是大于8)可以分成两个质数的和的形
    //即:当数n为偶数时 满足条件。
    //当n为奇数时 加1 也满足条件。
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #define max 10000010
    int is_prime[max];
    void if_prime()
    {
        memset(is_prime,-1,sizeof(is_prime));
        int num=(int)sqrt(max);
        for(int i=2; i<=num; i++)
        {
            if(is_prime[i])
                for(int j=i*i; j<=max; j+=i)
                    is_prime[j]=0;
        }
    }
    int main()
    {
        int a,b,c,d;
        int n;
        if_prime();
        while(scanf("%d",&n)!=EOF)
        {
            if(n<8)
                printf("Impossible.\n");
            else if(n%2)
            {
                a=2;
                b=3;
                for(int i=2; i<=n-5; i++)
                    if(is_prime[i]&&is_prime[n-5-i]&&(n-5-i)>1)
                    {
                        c=i;
                        d=n-5-i;
                        break;
                    }
                printf("%d %d %d %d\n",a,b,c,d);
            }
            else
            {
                a=2;
                b=2;
                for(int i=2; i<=n-4; i++)
                    if(is_prime[i]&&is_prime[n-4-i]&&(n-4-i)>1)
                    {
                        c=i;
                        d=n-4-i;
                        break;
                    }
                printf("%d %d %d %d\n",a,b,c,d);
            }
        }
        return 0;
    }
    

    展开全文
  • 四个素数问题

    2012-10-18 21:57:10
    但是每个整数能表示成四个素数吗?希望你能帮我们高效地解决这一问题。在这个问题中,素数的定义为“一个素数是指一个正整数,且该正整数有且只有两个不同的因子”。例如37是一个素数,因为它只有两个不同的因子...
  • 周的编程作业,求素数和 (我们认为2是第一素数,3是第二素数,5是第三素数,依次类推。现在,给定两整数n和m,0<n<=m<=200,你的程序要计算第n素数到第m素数之间所有的素数的和,包括第n...

    中国大学MOOC课程——程序设计入门(浙大翁恺老师)

    第四周的编程作业,求素数和
    (我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。)
    下面是我写的代码,不知道问题出在哪里,求各位大佬帮忙看一下~

    #include <stdio.h>
    int main(){
    	int i,x,n,m;
    	int isPrime=1,a=1,sum=2;
    	scanf("%d %d",&n,&m);
    	if(n==1&&m==1){
    		sum=2;                /*2的情况无法用下面if判断,所以单独列出*/
    	}
    	else if(n>0&&m<=200&&n<=m){
    	    for(x=3;a<m;x++){
    	        for(i=2;i<x;i++){               /*用于判断是否是素数*/
    	            if(x%i==0){
    	            	isPrime==0;
    	            	break;
    		        }
                }
                if(isPrime==1){    /*如果是素数,则进行素数个数计数,及求和操作*/
        	        a++;
            	    if(a>=n){
        	        sum=sum+x;
    				}
                }
            }
    	}
    	printf("%d\n",sum);
    	return 0;
    }
    
    
    展开全文
  • package main import "fmt" ...//将管道中的数取出来,判断是否是素数,是的话放入新的管道中 func prineNums(getNum chan int, primeNum chan int, exitStat chan bool) { //通过死循环取数 f
    package main
    
    import "fmt"
    
    //将数写入管道中
    func getNums(getNum chan int) {
    	for i := 2; i < 200; i++ {
    		getNum <- i
    	}
    	close(getNum)
    }
    
    //将管道中的数取出来,判断是否是素数,是的话放入新的管道中
    func prineNums(getNum chan int, primeNum chan int, exitStat chan bool) {
    	//通过死循环取数
    	for {
    		v, ok := <-getNum
    		if !ok {
    			break
    		}
    		//判断是否是素数
    		flag := true //素数判断标志位
    		for i := 2; i < v; i++ {
    			if v%i == 0 { //说明不是素数
    				flag = false
    				break
    			}
    		}
    		if flag {
    			primeNum <- v //将素数存进去
    		}
    	}
    	//取数操作时多个协程共同进行的,里不能close,不知道别的协程是否取数完毕,只能判断当前取数的协程
    	fmt.Println("这里有一个协程取数完毕~~")
    	//将完毕标志位放进去
    	exitStat <- true
    }
    
    func main() {
    	//创建三个管道
    	//从8000取数放到管道
    	getNum := make(chan int, 1000)
    	//从管道中取素数放到新的管道
    	primeNum := make(chan int, 1000)
    	//标志位管道,判断程序协程是否执行完毕
    	exitStat := make(chan bool, 4) //四个协程
    
    	//首先放进去数
    	getNums(getNum)
    	//然后四个协程筛选素数
    	for i := 0; i < 4; i++ {
    		go prineNums(getNum, primeNum, exitStat)
    	}
    	//判断四个协程是否全部执行完毕、
    	for i := 0; i < 4; i++ {
    		<-exitStat //啥时候能取完,说明四个协程都运行结束
    	}
    	//关闭存素数管道,打印素数
    	close(primeNum)
    	for {
    		v, ok := <-primeNum //取数据
    		if !ok {
    			break
    		}
    		fmt.Println(v)
    	}
    }
    

    输出结果
    在这里插入图片描述

    加入了时间统计功能,使用的是time包中的time.Now().Unix(),并且将exitStat使用匿名函数封装起来并通过协程运行

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    //将数写入管道中
    func getNums(getNum chan int) {
    	for i := 2; i < 700000; i++ {
    		getNum <- i
    	}
    	close(getNum)
    }
    
    //将管道中的数取出来,判断是否是素数,是的话放入新的管道中
    func prineNums(getNum chan int, primeNum chan int, exitStat chan bool) {
    	//通过死循环取数
    	for {
    		v, ok := <-getNum
    		if !ok {
    			break
    		}
    		//判断是否是素数
    		flag := true //素数判断标志位
    		for i := 2; i < v; i++ {
    			if v%i == 0 { //说明不是素数
    				flag = false
    				break
    			}
    		}
    		if flag {
    			primeNum <- v //将素数存进去
    		}
    	}
    	//取数操作时多个协程共同进行的,里不能close,不知道别的协程是否取数完毕,只能判断当前取数的协程
    	fmt.Println("这里有一个协程取数完毕~~")
    	//将完毕标志位放进去
    	exitStat <- true
    }
    
    func main() {
    	//创建三个管道
    	//从8000取数放到管道
    	getNum := make(chan int, 1000)
    	//从管道中取素数放到新的管道
    	primeNum := make(chan int, 700000)
    	//标志位管道,判断程序协程是否执行完毕
    	exitStat := make(chan bool, 4) //四个协程
    
    	starttime := time.Now().Unix() //time.Now().Unix()
    	//首先放进去数,也使用协程
    	go getNums(getNum)
    	//然后四个协程筛选素数
    	for i := 0; i < 4; i++ {
    		go prineNums(getNum, primeNum, exitStat)
    	}
    	//判断四个协程是否全部执行完毕、这里用匿名函数封装起来,同样使用协程运行
    	go func() {
    		for i := 0; i < 4; i++ {
    			<-exitStat //啥时候能取完,说明四个协程都运行结束
    			endtime := time.Now().Unix()
    			//统计协程运行时间
    			fmt.Println("使用协程耗费时间=", endtime-starttime)
    		}
    		close(primeNum) //关闭存素数管道,才可以打印素数
    	}()
    	//主线程,打印素数
    	for {
    		v, ok := <-primeNum //取数据
    		if !ok {
    			break
    		}
    		fmt.Println(v)
    	}
    	fmt.Println("主线程执行完毕~~")
    }
    
    
    展开全文
  • 趣味素数

    2020-03-01 19:50:18
    除了1它本身不能被其他数整除的数 求100以内的素数: 运行结果如下: 代码如下: public class Ch4_1 { public static void main(String[] args) { // TODO Auto-generated method stub int i; for(i=2;i...

    素数:

    素数是指不能被分解的数。除了1和它本身不能被其他数整除的数
    求100以内的素数:
    运行结果如下:
    在这里插入图片描述

    代码如下:

    public class Ch4_1 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int i;
    		for(i=2;i<=100;i++) {
    			boolean flag=true;
    			for(int j=2;j<=(int)Math.sqrt(i);j++) {
    				if(i%j==0) {
    					flag=false;
    					break;
    				}
    			}
    			if(flag)
    				System.out.println(i);
    		}
    		
    
    	}
    	
    }
    
    

    孪生素数:

    孪生素数:若两个素数相差为2,则这2个素数就是孪生素数
    求1-100之内的孪生素数
    运行结果如下:
    在这里插入图片描述
    代码如下:

    public class Ch4_2 {
    	public static void  main(String[] args) {
    		// TODO Auto-generated method stub
    		int a[]=new int[100];//利用数组存储素数
    		int n=0;
    		for(int i=2;i<=100;i++) {
    			boolean flag=true;
    			for(int j=2;j<=(int)Math.sqrt(i);j++) {
    				if(i%j==0) {
    					flag=false;
    					break;
    				}
    			}
    			if(flag) {
    				a[n]=i;//将素数存储在数组中
    				n++;
    			}
    		}
    		System.out.println("100以内的孪生素数如下:");
    		for(int i=0;i<n;i++) {//遍历数组
    			if(a[i+1]-a[i]==2) {
    				System.out.print(a[i]+" ");
    				System.out.print(a[i+1]+" ");
    				System.out.println("\n");
    			}
    		}
    	}
    }
    
    

    可逆素数

    可逆素数:一个素数的各位数值顺序颠倒后得到的数仍为素数
    编写程序 找出1-1000之间的可逆素数

    运行结果如下:
    在这里插入图片描述
    程序代码如下:

    public class Ch4_3 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int count=1;
    		System.out.println("1000以内的可逆素数如下:");
    		for(int i=2;i<=1000;i++) {
    			if(isSushu(i)&&isSushu(fanSushu(i)))
    				System.out.printf(count++ %7!=0? "%3d ":"%3d \n",i);//满足条件,格式输出
    		}
    
    	}
    	//是素数
    	public static boolean isSushu(int n) {
    		boolean isSushu=true;
    		if(n==1 ||n==2)
    			return true;
    		for(int i=2;i<Math.sqrt(n);i++) {
    			if(n%i==0)
    				return false;
    		}
    		if(isSushu==true) {
    			return true;
    		}
    		else
    			return false;
    	}
    	//反素数
    	public static int fanSushu(int n) {
    		//getBitCount(求数n的长度)
    		int len = getBitCount(n);
    		int s=0;
    		for(int i=1;i<=len;i++) {
    			//getBit(n,i)求数n的第i位上的数字
    			s+=Math.pow(10, len-i)* getBit(n,i);//每一位乘以权值累加
    		}
    		return s;
    		
    	}
    	//获取一个数的位数
    	private static int getBitCount(int n) {
    		// TODO Auto-generated method stub
    		int i=1;
    		while(n / 10 > 0) {//循环直到0为止
    			i++;//计数器加一
    			n /= 10;//截断最后一位
    		}
    		return i;//返回长度
    	}
    	//获取N位数第i位
    	private static int getBit(int num, int i) {
    		// TODO Auto-generated method stub
    		if(i>getBitCount(num)|| i<1) {
    			return -1;
    		}
    		return (num % ((int) Math.pow(10, i))/(int)Math.pow(10, i-1));
    	}
    
    }
    
    
    展开全文
  • =200,程序计算第n素数到第m素数之间所有的素数的和,包括第n个素数和第m素数。 输入格式 两整数,第一表示n,第二表示m。 输入样例 2 4 输出样例 15 package hello; import java.util.Scanner; public...
  • =200,你的程序要计算第n素数到第m素数之间所有的素数的和,包括第n个素数和第m素数。 注意,是第n素数到第m素数之间的所有的素数,并不是n和m之间的所有的素数。 输入格式: 两整数,第一表示n,第二...
  • 令 P​i​​ 表示第 i 个素数。现任给两正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。 输入格式: 输入在一行中给出 M N,其间以空格分隔。 输出格式: 输出从 P​M​​ 到 P​N​​ 的...
  • 一句话实现输出所有由1,2,3,4这四个数字组成的素数,并且每个素数中每个数字只使用一次代码运行结果 代码 print([i*1000+j*100+m*10+n for i in [1,2,3,4] for j in [1,2,3,4] for m in [1,2,3,4] for n in [1,2,3,4]...
  • 现在,给定两整数n和m,0,你的程序要计算第n素数到第m素数之间所有的素数的和,包括第n个素数和第m素数。注意:是第n素数到第m素数,不是n和m之间的素数!输入格式: 两正整数,第一表示n,第二...
  • 要求素数,首先我们要知道什么是素数,在解题的时候,不要急着去寻找方法解题,而是要先了解它的根本,才可以在遇到类似题的时候轻松面对解决质数(prime number)又称素数,有无限。一大于1的自然数,除了1它...
  • 一、判断一数是不是质数(素数)质数又称素数。一大于 1 的自然数,除了 1 它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。0 1 既不是质数也不是合数,最小的质数是 2function 优化: 假如 n 是...
  • 1素数和(5分)题目内容:我们认为2是第一素数,3是第二素数,5是第三素数,依次类推。现在,给定两整数n和m,0&lt;n&lt;=m&lt;=200,你的程序要计算第n素数到第m素数之间所有的素数的和,...
  • 题目内容: 我们认为2是第一素数,3是第二素数...一整数,表示第n素数到第m素数之间所有的素数的和,包括第n个素数和第m素数。 输入样例: 2 4 输出样例: 15 时间限制:1000ms内存限
  • 求1-100之间的所有质数(素数)的: 所以先必须知道什么是质数? 一个数是不是素数素数”是指除了能被1自身整除外,不能被任何... 一、规律记忆法 首先记住23,而23两个质数的乘积为6。100以内的质数...
  • 令 P​i​​ 表示第 i 个素数。现任给两正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。 输入格式: 输入在一行中给出 M N,其间以空格分隔。 输出格式: 输出从 P​M​​ 到 P​N​​ 的...
  • 题目:C语言:验证哥德巴赫猜想:任何一大于6的偶数均可表示为2个素数【问题描述】验证哥德巴赫猜想:任何一大于6的偶数均可表示为2个素数。例如6=3+3,8=3+5,…,18=5+13。将6~100之间的偶数都表示成2...
  • //列举1到100之间的所有素数,并求每个素数是其余两个素数,要求之的两个素数之差事最大的。c语言程序:#includeint main(){int i,j,r;int x;x=2;r=1;printf("%4d",x);int a[30];a[r]=x;for(i=2;i<100;i++)...
  • 令 P​i表示第 i 个素数。现任给两正整数 M≤N≤10^4,请输出 PM到 PN的所有素数。 输入格式: 输入在一行中给出 M N,其间以空格分隔。 输出格式: 输出从 P​M到 PN的所有素数,每 10 数字占 1 行,其间以...
  • 素数又称质数,是指在大于1的自然数中,除了1它本身以外不再有其他因数的自然数。 介绍种求解自然数n以内素数集合的方法,求解效率依次递进,想看最有效率的方法直接翻到最后就好。 种求解方法:常规方法,...
  • 闲话不多说,直接写代码。 方法1 #include<stdio.h> #include<stdlib.h> ...//输出0~100以内的质数 方法1 ... printf("100以内的素数有:");...//初始化值为3,程序从3开始计算每值是否为质数 do { .
  • 位可逆素数

    千次阅读 2016-07-16 12:21:28
    /* * 位可逆素数:将一个四位数的素数进行反序后其依然是一个素数 * StoryMonster 2016/7/12 */
  • 即在一个4*4的矩阵中,每一个格填入一个数字,使每一行、每一列两条对角线上的四个数字所组成的四位数,均为可逆素数(改数逆序后仍是素数)。 提示:这样的矩阵有很多。 **输出提示信息:“There are magic ...
  • 周编程作业1-素数和

    千次阅读 2014-12-23 12:00:26
    题目内容:我们认为2是第一素数,3是...一整数,表示第n素数到第m素数之间所有的素数的和,包括第n个素数和第m素数。输入样例: 2 4输出样例: 15 import java.util.Scanner; public class Main { pu
  • 【算法】素数(质数)判断方法

    万次阅读 多人点赞 2017-11-29 17:05:32
    大于1的自然数,除了1它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。我们可以从它的定义得到判断素数的 第一方法: 从2到n - 1, 判断是否存在能被n整除的数,既(n%i == 0, 2 ),如果有就不是...
  • 1.算术基本定理:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 2. 若一个数可以进行因数分解,则得到的两个数一定是有一个&amp;gt;=sqrt(x),另一个&amp;lt;=sqrt(x). ...
  • 质数又称素数。...合数是由若干个质数相乘而得到的。所以,质数是合数的基础,没有质数就没有合数。这也说明了前面所提到的质数在数论中有着重要地位。 闰年 年一闰;百年不闰,百年再闰。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,514
精华内容 17,405
关键字:

四个质数的和