C和Python中给出不同答案的指数

2024-05-15 10:32:12 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使用Fermat的小定理,发现它在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

Tags: 答案httpscomhtml指数primenumwolfram
3条回答

在C语言中,pow()函数接受并返回近似值的双精度浮点值

在Python中,**运算符使用Python整数执行操作,增大大小(用于保存值的内存)。如果在操作之前将数字强制为浮点,则可能会得到相同的结果

在C语言中,您可以尝试编写一个与uint64_t(unsigned long-long)一起使用的不同幂函数,看看它是否有效

如果想要精确,需要使用long-long。问题是没有pow,所以只能归结为简单的乘法

long long n, val;
int ii;

n = 13LL;
val = n;
for (ii = 2; ii < 17; ++ii)
    val *= n;
printf("%lld\n", val);
printf("%lld\n", val % 17LL);

问题是我应该使用powl()返回一个长双精度而不是一个双精度,我还应该使用fmodl()返回具有长双精度类型的剩余部分

C代码工作

long double prime_num = powl(13,17-1);
>665416609183179841
fmodl(primen_num,17);
>1

相关问题 更多 >