C++ 如何在c或c++;?
在C语言中,我得到一个语法错误,因为它超出了我猜想的内存限制。我能在C或C++中解决这个问题,这样它会给我一个10的幂模,1000?< /p> < p>在C(和C++中也太过)了。这不是一个有效的语法。您可以使用C++ 如何在c或c++;?,c++,c,C++,C,在C语言中,我得到一个语法错误,因为它超出了我猜想的内存限制。我能在C或C++中解决这个问题,这样它会给我一个10的幂模,1000?< /p> < p>在C(和C++中也太过)了。这不是一个有效的语法。您可以使用pow函数进行幂运算。但请记住,pow的返回值是double,模运算符适用于int。你需要注意 print 10**1000 % 7 您可以使用pow进行电源操作。在这里,结果的大小是一个较大的值,因此您需要将问题分成较小的部分,然后用c语言求解较小的部分,否则您需要处理较大的数字。
pow
函数进行幂运算。但请记住,pow
的返回值是double
,模运算符适用于int
。你需要注意
print 10**1000 % 7
您可以使用
pow
进行电源操作。在这里,结果的大小是一个较大的值,因此您需要将问题分成较小的部分,然后用c语言求解较小的部分,否则您需要处理较大的数字。您可以应用模数规则来减少问题,如下所示:
long result = (long)pow(10, 1000);
result = result % 7;
将这些规则结合起来,并使用(mod 10)来减少步骤中生成的数字。在c中使用内置的
pow()
函数来获得数字的幂,即X^y=pow(X,y)除了在c/c++中不是有效语法之外,在python中这是一种不好的做法
如果你这样做
10^1000 % 7 =((10%7)^1000)%7
10^1000 % 7 =(((((10^10)%7)^10)%7)^10)%7
它将使用模幂运算,因此它将比使用模幂运算快得多
pow(10,1000,7)
在小型(如32位)寄存器中解决此类大整数问题的最常用方法是使用,并在每一步取模。例如,10^10仍然太大,无法容纳32位整数,尽管现在您可能只需要使用长整数。
- 在C和C++中没有<代码> **/COD>运算符,必须使用<代码> POW函数,但是只适用于浮点类型;%运算符仅适用于整数类型,对于FP类型,必须使用
李>fmod
- 无论如何,如果您插入了一些常量10**n,您只需编写
(例如,1En
)李>1E42
- 。。。。但没有一种标准类型能够容纳1E1000这样大的数字;即使某些FP类型能够保存它,由于尾数的精度有限,您也无法可靠地在其上使用
李>fmod
但是:可以计算您提供的表达式,而无需实际计算10**1000及其模数。阅读最简单的方法是将术语减少模数。一般公式是 ab模块c≡ (a模数c)(b模数φ(c))模数c 所以在这种情况下,你得到 101000模7=(10模7)(1000模φ(7))模7 10模7=3 φ(7)=6 1000模6=4 34=81 81模7=4
那么101000 mod 7=4您是否尝试过
long
?10乘以1000解引用?不要只在标记中使用垃圾邮件语言,答案取决于语言。要表示这么大的数字,那么长的长度就不够了,“bignums”你可以问一下具体的m^n%p
表达式吗?在这种情况下,可以玩一些小把戏。如果你问“一般来说,我如何处理非常大的数字”,那么这是一个不同的问题。你从哪个库获得pow
?@juanchopanza pow是一种内置语言?没有C或C++没有内置函数。它们可能有一些运算符,但pow
不是其中之一。@juanchopanza我指的是用python编写的代码。哦,我明白了。但是他们问如何在C或C++中这样做,所以你没有回答这个问题。浮点POW,然后是模运算,不会产生任何有意义的结果。使用例如Pascal的Math.Pow时也会遇到同样的问题。@MarcovandeVoort;嘿,你的观点是正确的!增加答案。@MarcovandeVoort;编辑了答案。改进没有帮助。浮点数只有大约18位有效数字,10^1000有1000位有效数字。一个人需要大整数,或者重写(学习C’s)。为此,您使用的规则“a^b(mod p)=a^(b mod p)(mod p)”只有在a
和p
是互质时才有效。反例-2^10(mod 8)!=2^2(mod 8)@MattMcNabb正常。谢谢但我指定的规则类似于2^10(mod 8)=(2^2(mod 8))^5(mod 8)。
10 ** 1000 % 7