2014-09-13 3 views
1

Как проверить делимость очень длинного числа в C++? я должен проверить, если (3 * N * N + 3 * п-1)делится на 2, 3 и 5 и п может быть до 10^10 так долго долго INT также сомнительно работать, хотя я пытался сделать это:Как проверить делимость очень длинного числа в C++?

unsigned long long int gg4,l; 
gg4=(3*n*n+3*n-1); 
if(gg4%3==0){ 
    gg4=gg4/3; 
} 
if(gg4%2==0){ 
    gg4=gg4/2; 
} 
if(gg4%5==0){ 
    gg4=gg4/2; 
} 

Но я предполагаю, что это не будет работать из-за диапазона п так, пожалуйста, помогите! :)

после этого я также необходимо разделить(3 * п * п + 3 * п-1) тем фактором, так, пожалуйста, помогите!

+2

Он никогда не будет делиться на 2, так как '3 * п * n' нечетным или' 3 * п-1' нечетное. Он никогда не будет делится на 3. Это только оставляет 5. – harold

+0

is 'if (gg4%' ** '5' **' == 0) gg4 = gg4/'**' 2' ** mistype? – GingerPlusPlus

+1

Дальность - проблема. 10^10 принимает ~ 33 бит, поэтому n * n принимает ~ 66 бит. –

ответ

3

Чтобы расширить мой комментарий, есть два случая, когда (3*n*n+3*n-1) % 5 == 0, а именно

  • n = 5 * m + 1
  • n = 5 * m + 3

Для m целое.

Так что на самом деле вам не нужно рассчитывать долгое время, вы можете работать напрямую с n и даже не рассчитать 3 * n * n + 3 * n - 1.

Просто проверьте:

n % 5 == 1 || n % 5 == 3 
+0

Так домашнее задание как набор было неправильным направлением? Кто бы мог подумать. –

+0

Так что просто проверьте, что последняя цифра - '1',' 3', '6' или' 8'. – Jarod42