如何解决素数III问题18-即使我认为我是正确的,我也没有得到正确的答案
|| 我刚来这地方。我正试图解决此练习问题18,只是为了增强我的解决能力。我已经编码了答案。任务要求“在1,000,000以下的质数中,有多少个数字的总和等于两周中的天数?”(两周为14天)。我的答案是16708,但这是错误的。我希望你能帮助我。我不知道我的错误是什么。我有2种方法,一种方法用于生成素数,另一种方法用于计算每个素数的位数。 这是我的代码: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);
}
}
解决方法
您应该检查内部for循环外是否有“ 1”。现在发生的是,您还算出了它们的数字总和大于14但那些质数的前缀中的数字总和等于14的质数。
, 这部分...
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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。