重生左唯txt微盘:用程序表示大于6的偶数可用2个质数相加??

来源:百度文库 编辑:高校问答 时间:2024/04/30 16:14:10

import java.util.Scanner;
public class Primes
{

public static boolean isPrime(int i)
{
long a = 1;
for (long n = 2; n <= Math.sqrt(i); n++)
{
a = a * ( i % n);
if ( i % n >= 2)
{
a = a / (i %n);
}
}
if (a != 0)
{
return true;
}else{
return false;
}
}

public static int[] arrayOfPrimes(int i)
{
int[] primes = new int[i];
int num = 0;
for( int m = 2; m<= i; m++)
{
if(Primes.isPrime(m))
{
primes[num] = m;
num++;
}
}
return primes;
}

public static void main(String [] args)
{
Scanner in = new Scanner(System.in);
int target = in.nextInt();
int[] arrayOfPrimes = Primes.arrayOfPrimes(target);
for(int i = 0; i < target; i++)
{
int test = arrayOfPrimes[i];
if (Primes.isPrime (target-test))
{
System.out.println(target + " = " + test + " + " + (target-test));
break;
}
}
}
}

#include<stdio.h>
#include<math.h>
void main()
{
int n,i,j,m,k;
printf("输入一个大于6的偶数:");
scanf("%d",&n);
//先判断n减去质数2的差是不是质数
k=n-2;
if(k%2!=0){
for(m=3;m<=sqrt(k);m=m+2)if(k%m==0)break;
if(m>sqrt(k))printf("该数可由2,%d两质数相加",k);
}
//下三行为判断3-n之间的质数i
for(i=3;i<n;i=i+2){
for(j=3;j<=sqrt(i);j=j+2)if(i%j==0)break;
if(j>sqrt(i)) k=n-i;//k为n与一个质数的差
else k=1;
//只要证明这个差仍然是一个质数即可
if(k!=1){
for(m=3;m<sqrt(k);m=m+2)if(k%m==0)break;
if(m>sqrt(k))printf("该数可用%d,%d两个质数相加",i,k);}
}
}

PS:程序的过程是,先找出比n小的一个质数,再确定n减去这个质数后的差是不是质数,如果是,目的就达到。主体就是判断质数那三行,其原理是:只有当i不能被小于√i且不为1的所有整数整除时,才可以确认i是质数。

经调试后程序有效,可花了我不少精力呀。。。

这是......
歌德巴赫猜想,1+1
哦,天!

楼上的思想的对的,不过当要求效率的时候就不行了哈,一种简单的解决方法是是现筛一个素数表哈,当然还有什么概率测试算法之类的了!