俄氏乘法

又称俄国农夫法(Russian peasant method),
nm=(n/2)(2m)或nm=((n-1)/2)(2m)+m。
n为偶用前一个,奇用后一个。
到1*m=m时返回。

为什么要提这个算法呢,因为乘除2对计算机来说只是移位,这样速度就比较快了。我从来没有想过类似的方法,比较惊奇,所以记下来学习下。

时间效率O(log(n))。
下面是非递归的代码。

package fds;

public class NonRecursive {

	public static int  nonrecursive(int n,int m)
	{
		int sum=0;
		
		while(n!=0)//我们把n==1的那一种情况一起加里面了
		{
			if((n&1)==1)   sum+=m;
			n/=2;
			m*=2;
		}
		
		
		
		return sum;
	}
	
	
	public static void main(String[] args) {

		
		System.out.println(nonrecursive(35243, 1985));


	}

}

猜你喜欢

转载自blog.csdn.net/weixin_41677899/article/details/84543233