如何在c ++中检查一个很长的数字的可分性?

时间:2014-09-13 10:46:35

标签: c++ long-integer modulo factorization

如何在c ++中检查一个很长的数字的可分性? 我必须检查(3 * n * n + 3 * n-1) 是否可以被2,3和5 整除, n可以达到10 ^ 10 所以 long long int 怀疑可以工作,虽然我尝试过这样做:

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;
}

但我想这不会起作用,因为n的范围所以请帮忙! :)

在此之后我还需要划分 (3 * n * n + 3 * n-1)因此请帮忙!

1 个答案:

答案 0 :(得分: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