2015-03-08 4 views
1

Я работаю над проблемой двенадцать на проекте Эйлера. Это все о числах треугольников; Я пытаюсь найти первый номер треугольника с более чем 500 делителями. Я написал программу, чтобы найти это, однако, это не дает мне правильный ответ, и я не понимаю, почему. Я представил свой код ниже:Почему моя программа работает не так, как ожидалось?

public class problemTwelve { 
    public static void main(String [] args) { 
    int i = 1; 
    int number = 1; 
    while(getDivisors(number) < 500) { 
    number += i; 
    i++; 
    } 
    System.out.println("The first triangle number to have greater than 500 divisors is: " + number); 
    } 

    private static int getDivisors(int triangleNum) { 
    int noOfDivisors = 0; 
    int numToTest = (int) Math.sqrt(triangleNum); 
    for(int i = 1; i <= numToTest; i++) { 
     if((triangleNum % i) == 0) { 
     noOfDivisors += 2; 
     } 
    } 
    if((numToTest * numToTest) == triangleNum) { 
     noOfDivisors--; 
    } 
    return noOfDivisors; 
    } 
} 

Выход задается программой на работы она выглядит следующим образом:

Первый номер треугольник, чтобы иметь больше чем 500 делителей: 146611080

При вводе этого номера в качестве ответа на проект Эйлера мы видим, что это неправильно. Я не знаю, где я ошибся в своей программе ...

+0

Вы должны инициализировать 'number' в '0' , –

ответ

1

Кажется, что число, которое вы проверяете, не является треугольником. Просто взглянув на код, второе число проверено на 2, которое не является числом треугольника.

Попробуйте переместить линию

i++;
перед линией
number+=i;

0

вы должны начать свои числа от 0 не 1, вот правильный код:

int i = 1; 
    int number = 0; 
    while(getDivisors(number) < 500) { 
     number += i; 
     i++; 
    } 
    System.out.println("The first triangle number to have greater than 500 divisors is: " + number); 
} 


private static int getDivisors(int triangleNum) { 
    int noOfDivisors = 0; 
    int numToTest = (int) Math.sqrt(triangleNum); 
    for(int i = 1; i <= numToTest; i++) { 
     if(triangleNum % i == 0) { 
      noOfDivisors += 2; 
     } 
    } 
    if((numToTest * numToTest) == triangleNum) { 
     noOfDivisors--; 
    } 
    return noOfDivisors; 
} 
Смежные вопросы