Прежде чем меня осудят за несоблюдение правил, я ДЕЙСТВИТЕЛЬНО воспользовался функцией поиска и увидел, что есть несколько тем, посвященных именно этой проблеме. Однако ни один из них не ответил на мой конкретный вопрос.
Я работаю над задачей Эйлера №3, где мне нужно найти наибольший простой делитель числа 600851475143. Мне не нужна помощь в решении задачи. Я использовал метод грубой силы (может быть лучше , я знаю) для ее решения.
Программа возвращается правильно для всех тестов, которые я провел с меньшими числами (7 цифр и меньше). Однако, когда я ввожу 600851475143 в качестве длинного ввода, моя программа никогда не возвращает мне результат. Мой номер просто слишком велик для ввода? Что может быть причиной этого? Первоначально я думал, что это потому, что я использовал теги int вместо long, но их изменение не изменило мой результат.
Я уверен, что это просто, и мне этого не хватает, но мне очень любопытно, что происходит. Заранее спасибо :)
//Euler 3: Largest Prime Factor
import java.io.*;
import java.util.Scanner;
import java.lang.Math;
public class Euler3
{
public static void main(String[] args)
{
Scanner scn = new Scanner(System.in);
System.out.println("Enter a number!");
// Create scanner
long numberInput=scn.nextLong();
//Can't have a factor higher than it's square root
double limit=Math.floor(Math.sqrt(numberInput));
// System.out.println(limit);
//Start testing from the highest number possible
for(long i=(numberInput-1);i>0; i--)
{
if(numberInput%i==0)
System.out.println(i+" is prime: "+isPrime(i));
}
} //End Main
public static boolean isPrime(long n)
{
//check if n is a multiple of 2
if (n%2==0) return false;
//if not, then just check the odds
for(int i=3;i*i<=n;i+=2)
{
if(n%i==0)
return false;
}
return true;
}
}