如何在c或c ++中轻松解决这个问题?

时间:2014-03-19 18:55:34

标签: c++ c

print 10**1000 % 7

在C中我收到语法错误,因为它超出了我猜的内存限制。我可以用C或C ++以某种方式解决这个问题吗,这样它会给我一个10的模数10的模数?

6 个答案:

答案 0 :(得分:5)

除了在C / C ++中不是有效的语法之外,在python中这是不好的做法。

如果你这样做

pow(10,1000,7)

它将使用模幂运算,因此它比执行

快得多
10 ** 1000 % 7

答案 1 :(得分:3)

您可以使用pow进行电源操作。这里结果的大小很大,所以你需要将问题分成较小的部分并解决较小的问题以获得c中的解决方案,否则你需要处理大数字。
您可以应用模数规则来减少问题,

10^1000 % 7 =((10%7)^1000)%7
10^1000 % 7 =(((((10^10)%7)^10)%7)^10)%7

结合这些规则并用于减少步骤中生成的数字(mod 10)。在c中使用内置pow()函数以获得数字的幂为X ^ y = pow(x,y)

答案 2 :(得分:2)

在小型(例如32位)寄存器中解决这些类型的大整数问题的最常用方法是使用exponentiation by squaring,并在每一步采用模数。例如。 10 ^ 10仍然太大而不适合32位int,尽管你现在可能只是使用了很长时间。

答案 3 :(得分:1)

在C(和C ++太AFAIK)中,这不是有效的语法。您可以使用pow函数进行取幂。但请注意,pow的返回值为double,模运算符适用于int。你需要一些注意事项。

long result = (long)pow(10, 1000);
result = result % 7;

答案 4 :(得分:1)

最简单的方法是通过模数减少项。通用公式是

a b modc≡(a mod c)(bmodφ(c)) mod c

所以在这种情况下你得到

10 1000 mod 7 =(10 mod 7)(1000modφ(7)) mod 7.

10 mod 7 = 3

φ(7)= 6

1000 mod 6 = 4

3 4 = 81

81 mod 7 = 4

所以10 1000 mod 7 = 4

答案 5 :(得分:0)

  • 在C和C ++中没有**运算符,你必须使用pow函数,但是它只适用于浮点类型;并且%运算符仅适用于整数类型,对于FP类型,您必须使用fmod;
  • 无论如何,如果你插入一些常数10 ** n,你只需要写1En(比如1E42);
  • ....但是没有标准类型可以容纳1E1000这么大的数字;即使某些FP类型能够容纳它,由于尾数的有限精度,你也无法在其上可靠地使用fmod

那么,Python如何做呢?在引擎盖下,超出"正常"类型它使用任意精度库。您可以在C ++程序中执行相同的操作,提供此类库(例如,您可以使用GMP)。

但是 :您可以计算您提供的表达式,而无需实际计算10 ** 1000及其模数。阅读Modulus power of big numbers