码迷,mamicode.com
首页 > 其他好文 > 详细

求M的N次方最后三位

时间:2015-07-03 10:45:39      阅读:822      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!