【问题标题】:how to check divisibility of a very long number in c++?如何在c ++中检查一个非常长的数字的可分性?
【发布时间】:2014-09-13 10:46:34
【问题描述】:

如何在 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)除以那个因素,所以请帮忙!

【问题讨论】:

  • 它永远不能被 2 整除,因为 3*n*n 是奇数或 3*n-1 是奇数。它也永远不能被 3 整除。只剩下 5 个。
  • if(gg4% 5 ==0)gg4=gg4/ 2 打错了吗?
  • 范围是个问题。 10^10 需要 ~33 位,所以 n*n 需要 ~66 位。

标签: c++ long-integer modulo factorization


【解决方案1】:

扩展我的评论,(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

【讨论】:

  • 所以布置的作业是一个误导?谁会想到呢。
  • 所以只需检查最后一位数字是1368
猜你喜欢
  • 2014-11-29
  • 2021-11-15
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 2021-09-19
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多