64,651
社区成员
发帖
与我相关
我的任务
分享
/**
*任何大于2的偶数均为两个素数之和
*验证4到10000
*/
#include <stdio.h>
#include <math.h>
//判断num是不是素数,是则返回1
int isPrime(int num)
{
int d = 3;
if(num == 2 || num == 3)
return 1;
if(num%2 == 0)//num为偶数
return 0;
//num为奇数
while(d <= sqrt(num) && num % d != 0)
{
d += 2;
}
if(num % d != 0)
return 1;
return 0;
}
//判断是不是两个素数之和,如果是则输出并返回1
int isSumOfPrime(int even)
{
int sumOfPrime = 0;
int factor1 = 0;
int factor2 = 0;
for(int i = 2; i <= even/2; i++)
{
factor1 = i;
factor2 = even - i;
if(isPrime(factor1)==1 && isPrime(factor2)==1)
{
printf("%d = %d + %d\n", even, factor1, factor2);
sumOfPrime = 1;
break;
}
}
return sumOfPrime;
}
int main()
{
int i;
for(i = 4; i <= 10000; i += 2)
{
isSumOfPrime(i);
}
return 0;
}
package prime;
public class Prime {
//判断num是不是素数,是则返回true
public boolean isPrime(int num){
if(num == 2 || num == 3)
return true;
if(num%2 == 0)//num为偶数
return false;
//num为奇数
int d = 3;
while(d <= Math.sqrt(num) && num % d != 0){
d += 2;
}
if(num % d != 0)
return true;
return false;
}
}
package prime;
/**
* 任何大于2的偶数均为两个素数之和
* @author Administrator
*
*/
public class Goldbach {
private int count;
public void setCount(int count){
this.count = count;
}
public int getCount(){
return count;
}
public void inc(){
count++;
}
//public void output(){
//System.out.println(count);
//}
//判断是不是两个素数之和,如果是则输出并返回true
public boolean isSumOfPrime(int even){
boolean sumOfPrime = false;
Prime prime = new Prime();
int factor1 = 0;
int factor2 = 0;
for(int i = 2; i <= even/2; i++){
factor1 = i;
factor2 = even - i;
if(prime.isPrime(factor1) && prime.isPrime(factor2)){
System.out.println(even + " = " + factor1 + " + " + factor2);
sumOfPrime = true;
break;
}
}
return sumOfPrime;
}
public static void main(String[] args){
Goldbach num = new Goldbach();
num.setCount(0);
for(int i = 4; i <= 10000; i += 2){
if(num.isSumOfPrime(i))
num.inc();
}
//num.output();
}
}