尝试做费马小定理,注意到它在C语言中不起作用,所以我在Python中尝试了它,它工作正常。
费马小定理
https://mathworld.wolfram.com/FermatsLittleTheorem.html
答案应该给我 1 分,但我得到 13 分。
Python 指数(工作(
prime_num = 13**(17-1)
>665416609183179841
prime_num%17 = 1
C 指数(不工作(
double prime_num = pow(13,17-1)
>665416609183179904
fmod(prime_num,17) = 13
在 C 中,pow(( 函数获取并返回双精度浮点值,这些值是近似值。
在 Python 中,** 运算符使用 Python 整数执行操作,大小增加(用于保存值的内存(。 如果您在操作之前强制将数字作为浮点数,您可能会得到相同的结果。
在 C 中,您可以尝试编写一个与 uint64_t(无符号长长(一起使用的不同幂函数,看看它是否有效。
如果你想要精度,你需要使用long long。 问题是没有pow,所以它归结为简单的乘法。
long long n, val;
int ii;
n = 13LL;
val = n;
for (ii = 2; ii < 17; ++ii)
val *= n;
printf("%lldn", val);
printf("%lldn", val % 17LL);
powl()
它返回长双精度而不是双精度,我也应该使用fmodl()
它返回具有长双精度类型的其余部分。
C 代码工作
long double prime_num = powl(13,17-1);
>665416609183179841
fmodl(primen_num,17);
>1