尝试使用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:
在C语言中,pow()函数接受并返回近似值的双精度浮点值
在Python中,**运算符使用Python整数执行操作,增大大小(用于保存值的内存)。如果在操作之前将数字强制为浮点,则可能会得到相同的结果
在C语言中,您可以尝试编写一个与uint64_t(unsigned long-long)一起使用的不同幂函数,看看它是否有效
如果想要精确,需要使用long-long。问题是没有pow,所以只能归结为简单的乘法
问题是我应该使用
powl()
返回一个长双精度而不是一个双精度,我还应该使用fmodl()
返回具有长双精度类型的剩余部分C代码工作
相关问题 更多 >
编程相关推荐