素数III问题18 - 即使我认为我是对的,我也得不到正确的答案

时间:2011-05-27 22:03:37

标签: java math loops logic

我是新来的。我正试图解决这个练习Problem 18只是为了加强我的解决技巧。我已经编写了答案。该任务要求“1,000,000以下的素数有多少,其数字总和等于两周内的天数?” (两周是14天)。我的答案是16708,但这是错误的。我希望你能帮助我。我不知道我的错误是什么。我有2个方法,1个用于生成素数,另一个用于计算每个素数的数字。

这是我的代码:

import java.util.ArrayList;
import java.util.List;

public class Problema18 {

    public static void main(String args[]) {
        ArrayList<Integer> num = primes();
        System.out.println(num);
        count(primes());
    }

    public static ArrayList<Integer> primes() {
        List<Integer> primes = new ArrayList<Integer>();
        primes.add(2);

        for (int i = 3; i <= 1000000; i += 2) {
            boolean isPrime = true;

            int stoppingPoint = (int) (Math.pow(i, 0.5) + 1);
            for (int p : primes) {
                if (i % p == 0) {
                    isPrime = false;
                    break;
                }
                if (p > stoppingPoint) { break; }
            }
            if (isPrime) { primes.add(i); }
        }
        // System.out.println(primes);
        return (ArrayList<Integer>) primes;
        //System.out.println(primes.size());
    }

    public static void count(ArrayList<Integer> num) {
        int count = 0;

        for (int i = 0; i <= num.size() - 1; i++) {
            int number = num.get(i);
            String num1 = String.valueOf(number);
            int sum = 0;

            for (int j = 0; j < num1.length(); j++) {
                sum = Integer.parseInt(num1.charAt(j) + "") + sum;
                if (sum == 14) { count++; }
            }
            System.out.println(sum);
        }
        System.out.println(count);
    }
}

2 个答案:

答案 0 :(得分:5)

你应该检查内部for循环之外是否sum == 14。现在发生的是你还计算那些数字总和大于14的素数,但素数的某些前缀中的数字之和等于14。

答案 1 :(得分:3)

这部分......

    if (sum == 14) {
        count++;
    }

应该在内部for循环之外 - 即每次通过i for循环时都希望这样做,但是每次通过j for循环时都不希望这样做。

像这样:

        public static void count(ArrayList<Integer> num) {
            int count = 0;

            for (int i = 0; i <= num.size() - 1; i++) {
                int number = num.get(i);
                String num1 = String.valueOf(number);
                int sum = 0;


                for (int j = 0; j < num1.length(); j++) {
                    sum = Integer.parseInt(num1.charAt(j) + "") + sum;
            }
            System.out.println(sum);

            if (sum == 14) {
                count++;
            }

        }
        System.out.println(count);
}