在完成此题时已是深夜11点,所以当时没有在探究下去。
这次JSOI2008冬令营时,有幸听到南京航空大学李立新教授关于”程序设计与数学“的讲座(P。S。他实际上是给他徒弟,常州一中的林厚从,推广新书《程序设计与数学》),了解到更多的关于计算乘幂的编程知识,所以对程序进了更深一步的研究。
第一个想到的算法也是直接乘幂,使用exp、ln;
第二个算法是李立新教授的关于乘幂运算的初级版,效率较第一算法好一些,但是七个点(4、5、10、20、100、1000、10000)全部失败。
第三个算法是我在原贴提供的算法,能够过全部的点,将数据提升到30000000也能成功,使用了费马小定理。
第四个算法是结合了前两个的算法,在使用费马小定理时,乘幂的运算还是很厉害,所以在进行乘幂运算时使用了李立新教授的算法,时间基本上都在0.02s 左右。
具体的比较见附件中的表格。
又及:本题我个人命名为prime,因为1000003是一素数~~