您的位置:首页 > 其它

poj 2262 解题报告

2010-06-28 13:55 447 查看
这道题是给一个偶数,然后找出两个素数的a、b和等于这个偶数,如果有多对的话就输出一个a-b最大的组结果。这道题很简单以前AC过,今天我改了一些判断一个数是否是素数的那个方法,但是没想到时间还是和以前的差不多,在poj上提交还慢了几十ms,但是在天津大学大acm oj上提交快了几十ms,呵呵!

import java.util.Scanner;

public class Main{

private static int[] prime = new int[] {2, 3, 5, 7, 11, 13, 17, 19, 23,
29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163,
167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311,
313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389,
397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563,
569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641,
643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727,
733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821,
823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907,
911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997 };

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

while (sc.hasNextInt()) {
int n = sc.nextInt();

if (n == 0)
break;

boolean flag = false;

for (int i = 2; i < n;) {

// if (isPrime(i) && isPrime(n - i)) {
if (isPrime(i) && isPrime(n - i)) {
flag = true;
System.out.println(n + " = " + i + " + " + (n - i));
break;
}
if (i == 2)
++i;
else
i += 2;
}
if (!flag)
System.out.println("Goldbach's conjecture is wrong.");
}
}

static boolean isPrime(int num) {
//注释掉的是以前的方法
// int q = (int) Math.sqrt((double) num);
// for (int i = 2; i <= q; ++i) {
// if (num % i == 0)
// return false;
// }
boolean b = true;
for (int i = 0; i < 168; ++i) {
if (prime[i] >= num)
break;
else if (num % prime[i] == 0) {
b = false;
break;
}
}
return b;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: