这里只做了正整数求余,小数的话比较麻烦没去证明。
考虑到计算机能力,不可能真的写循环去求余,内存不允许,计算时间也不允许。
那么只能从算法上简化了。
思路是:假设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