1 问题
如何使用java输入两个正整数,并输出他们的最大公因数。
2 方法
Euclid规则:如果x和y是正整数,且有x>=y,那么gcd(x,y)=gcd(x mod y,y)。递归实现实现需在a,b为奇数时实现
当a,b为任意正整数时,可用如下方式结合然后加以实现算法思想:
当a,b都是偶数时,gcd(a,b)=2*gcd(a/2,b/2);
当a是奇数,b是偶数时,gcd(a,b)=gcd(a,b/2);
当a是偶数,b是奇数时,gcd(a,b)=gcd(a/2,b);
当a,b都是奇数时,gcd(a,b)=gcd((a-b)/2,b).
int gcd(int a,int b) { if(a<b) { swap(a,b); } if(b==0) { return a; } return gcd(b,a%b); } int gcd2(int a,int b) { int ans=1; while(a%2!=0&&b%2!=0) { a = a/2; b = b/2; ans=ans*2; } while(a != b) { if(a>b) { a = a-b; }else { b = b-a; } } return ans*a; } int gcd2(int a,int b) { int ans=1; while(a%2!=0&&b%2!=0) { a = a/2; b = b/2; ans=ans*2; } a=gcd2_2(a,b); return ans*a; } |
3 结语
我们通过讨论学习“如何在java生成随机数”,提出辗转相除法方法,通过在idea具体实验,证明该方法是有效的,当然本文在处理生成随机数表之类的问题还未解决,未来会逐渐探究该问题并解决问题。