print 10**1000 % 7
在C中我收到语法错误,因为它超出了我猜的内存限制。我可以用C或C ++以某种方式解决这个问题吗,这样它会给我一个10的模数10的模数?
答案 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)
**
运算符,你必须使用pow
函数,但是它只适用于浮点类型;并且%运算符仅适用于整数类型,对于FP类型,您必须使用fmod
; 1En
(比如1E42
); fmod
。 那么,Python如何做呢?在引擎盖下,超出"正常"类型它使用任意精度库。您可以在C ++程序中执行相同的操作,提供此类库(例如,您可以使用GMP)。
但是 :您可以计算您提供的表达式,而无需实际计算10 ** 1000及其模数。阅读Modulus power of big numbers