求一个fortran程序,具体要求是计算P的E次方的关于n的余数,计算式如图片所示,P和E还有n都

2025-03-13 15:31:14
推荐回答(1个)
回答1:

这里只做了正整数求余,小数的话比较麻烦没去证明。
考虑到计算机能力,不可能真的写循环去求余,内存不允许,计算时间也不允许。
那么只能从算法上简化了。
思路是:假设p=mn+k,m是大于等于0的整数,p^e=(mn+k)^e,根据二项式展开式可知,对p的e次方求n的余等效于对k的e次方求n的余。再用同样的思想来求k的e次方求n的余即可。
运行的图因为不知道怎么不能上传就不贴了。

program baidu_mod
integer::P,e,n
integer::res
integer::pa

read(*,*)P,e,n
pa=mod(p,n)
k=pa
do I=1,e-1
if(K>=n)then
K=mod(k,n)
endif
k=k*pa
enddo
if(K>=n)then
K=mod(k,n)
endif
write(*,*)K
pause
end