C++ 如何在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语言求解较小的部分,否则您需要处理较大的数字。

在C语言中,我得到一个语法错误,因为它超出了我猜想的内存限制。我能在C或C++中解决这个问题,这样它会给我一个10的幂模,1000?< /p> < p>在C(和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
那么,Python是如何工作的呢?在引擎盖下,超出“正常”类型的范围,它使用任意精度的库。你可以在C++程序中做同样的事情,提供这样的库(例如你可以使用GMP)。p>
但是:可以计算您提供的表达式,而无需实际计算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