Вопрос заключается в том -Проект Эйлера # 49 Java
арифметическая последовательность, 1487, 4817, 8147, в которой каждый из членов возрастает по 3330, необычен двумя способами: (я), каждый из три члена являются простыми, и (ii) каждое из 4-значных чисел являются перестановками друг на друга.
Нет арифметических последовательностей, состоящих из трех 1-, 2- или 3-значных чисел , имеющих это свойство, но есть еще одна 4-значная последовательность увеличения .
Какое 12-значное число вы создаете, объединив три термина в этой последовательности?
Я написал этот код -
package Problems;
import java.util.ArrayList;
import java.util.LinkedList;
public class Pro49 {
private static boolean isPrime(int n){
if(n%2 == 0) return false;
for(int i = 3; i<= Math.sqrt(n); i++){
if(n%i == 0) return false;
}
return true;
}
private static boolean isPerm(int m, int n){
ArrayList<Integer> mArr = new ArrayList<>();
ArrayList<Integer> nArr = new ArrayList<>();
for(int i = 0; i<4; i++){
mArr.add(m%10);
m /= 10;
}
for(int i = 0; i<4; i++){
nArr.add(n%10);
n /= 10;
}
return mArr.containsAll(nArr);
}
public static void main(String[] args) {
LinkedList<Integer> primes = new LinkedList<>();
for(int i = 1001; i<10000; i++){
if(isPrime(i)) primes.add(i);
}
int k = 0;
boolean breaker = false;
for(int i = 0; i<primes.size() - 2; i++){
for(int j = i + 1; j<primes.size() - 1; j++){
if(isPerm(primes.get(i), primes.get(j))) {
k = primes.get(j) + (primes.get(j) - primes.get(i));
if(k<10000 && primes.contains(k) && isPerm(primes.get(i), k)) {
System.out.println(primes.get(i) + "\n" + primes.get(j) + "\n" + k);
breaker = true;
break;
}
}
if(breaker) break;
}
if(breaker) break;
}
}
}
Я добавил печати линию System.out.println(primes.get(i) + "\n" + primes.get(j) + "\n" + k);
проверить номера. Я получил 1049, 1499, 1949, которые ошибаются. (По крайней мере, 1049 ошибочно).
Может ли кто-нибудь указать, где мой код/логика не так? Любая помощь приветствуется.
Конкатенация не связана с символами новой строки – Moira
@ 1blustone Да, я это знаю.Я просто хотел посмотреть, какие числа производятся в качестве вывода, поэтому я добавил '\ n'. Просто проверить, производятся ли перестановки в качестве вывода или нет. –
Вот несколько улучшенная версия, которая сначала собирает простые числа, состоящие из одних и тех же цифр, * перед * ищет эквидистантные числа: [IDEONE] (http://ideone.com/qCjHsf) – Andreas