求最大公约数

ydb7459022 2011-08-25 10:31:11
//最大公约数(假设M>N)
if(M%N==0){
System.out.println("最大公约数是"+N);

}
else{
for(int i=1;i<N;i++){
for(int j=i+1;j<N;j++){
//i是公约数,并且没有比他再大的公约数
if((M%i==0&&N%i==0)&&(M%j!=0&&N%j!=0)){
System.out.println(i);
}
}
}
}
}


麻烦高手看看哪里有问题???????????在线等…………
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2011-08-25
  • 打赏
  • 举报
回复
LS已经说了,两个数能整除i,不能整除i+1以后的情况有很多,所以这种写法是不对的
可以从大到小循环或者采用辗转相除法
if(M%N==0){
System.out.println("最大公约数是"+N);
} else{
for(int i=N-1;i>0;i--){ //从大数向小数循环
if(M%i==0&&N%i==0){
System.out.println(i);
}
}
}
影竹 2011-08-25
  • 打赏
  • 举报
回复
辗转相除法:http://baike.baidu.com/view/255668.htm
刚才应该是if((M%i==0&&N%i==0)&&(M%j!=0&&N%j!=0))
假设M=80,N=60
循环时i=2,j=7,11,12.。。时就会输出
影竹 2011-08-25
  • 打赏
  • 举报
回复
求最大公约数一般用辗转相除法,楼主这算法有问题
if((M%i==0&&N%i==0)&&(M%j!=0&&N%j!=0))
假设M=60,N=80
循环时i=2,j=7时就会输出,这样的情况会有很多,也就是说最后会输出一堆数而不是期望的答案
ydb7459022 2011-08-25
  • 打赏
  • 举报
回复
在线等……求大虾指教……
轻尘 2011-08-25
  • 打赏
  • 举报
回复
楼上正解。
补充:System.out.println(i);break;

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧