首页 > 其他 > 详细

求M的N次方最后三位

时间:2015-07-03 10:42:54      阅读:150      评论:0      收藏:0      [点我收藏+]

正整数M 的N次方有可能是一个非常大的数字,我们只求该数字的最后三位

例1:

比如输入5和3 ,5的3次方为125,则输出为125 

例2:

比如输入2和10  2的10次方为1024 ,则输出结果为24

例3:

比如输入111和5  111的5次方为116850581551,则输出结果为551

方法一:

因为m是比较大的数,n次方之后有可能会超出范围,我们可以利用大树相乘的方法:将数字看成一串字符串,按位相乘。但这种方法较繁琐。因为只取最后三位,我们每进行一次乘法就模1000,只留最后三位数即可。

int last_three_number(unsigned int m,unsigned int n)
 {
	 if(0==n) return 1;
	 if(0==m) return 0;
	 unsigned int i=0,result=1;
	 for(;i<n;i++)
	 {
	   result*=m;
	   if(1000<=result)
	   {
		   result%=1000;
	   }
	 }
	 return result;

 }
方法二:

二分求幂,在方法一的基础上,乘法不再是m*m。而是m的n/2次幂乘以m的n/2次幂。

代码如下:

int last_three_number1(unsigned int m,unsigned int n)
 {
	 if(0==n) return 1;
	 if(0==m) return 0;
	 unsigned int i=0,result=1;
	 while(n!=0)
	 {
		 if(n%2==1) result=(result*m)%1000;
		 m=(m*m)%1000;
		 n/=2;
	 }
	 return result;

 }





版权声明:本文为博主原创文章,未经博主允许不得转载。

求M的N次方最后三位

原文:http://blog.csdn.net/sinat_24520925/article/details/46732497

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!