| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2437 人关注过本帖
标题:[求助]求最大公约数
只看楼主 加入收藏
cszero
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-4-8
收藏
 问题点数:0 回复次数:11 
[求助]求最大公约数

import javax.swing.JOptionPane;

public class findLCM {
public static void main(String[] args) {
String input1 = JOptionPane.showInputDialog(null,
"Enter the first number:", "input",
JOptionPane.QUESTION_MESSAGE);
int num1 = Integer.parseInt(input1);
String input2 = JOptionPane.showInputDialog(null,
"Enter the second number:", "input",
JOptionPane.QUESTION_MESSAGE);
int num2 = Integer.parseInt(input2);
double result = seekFactor(num1, num2);
JOptionPane.showMessageDialog(null, num1 + "," + num2 + "最大公约数为:"
+ result, "求最大公约数", JOptionPane.INFORMATION_MESSAGE);
}

static double seekFactor(int n1, int n2) {
int[][] answer1 = Factor(n1);
int[][] answer2 = Factor(n2);
printstring0(answer1);
printstring1(answer1);
double result = findResult(answer1, answer2);

return result;

}

static void printstring0(int[][] an) {
for (int i = 0; i < an.length; i++)
System.out.print(an[i][0]);
}

static void printstring1(int[][] an) {
for (int i = 0; i < an.length; i++)
System.out.println(an[i][1]);
}

static int[][] Factor(int n1) {
int i = -1, k = 2;
int[][] factor = new int[n1 / 2][2];
for (; k <= Math.sqrt(n1); k++ ) {
i++;
while (n1 % k == 0) {
n1 = n1 / k;
factor[i][0] = k;
factor[i][1] += 1;

}
}
return factor;
}

static double findResult(int[][] ans1, int[][] ans2) {
int i = 0, j = 0, k = 0;
double result = 0;
int[][] total = new int[60][2];
while (ans1[i][0] != 0 && ans2[j][0] != 0) {
if (ans1[i][0] == ans2[j][0]) {
if (ans1[i][1] >= ans2[j][1]) {
total[k][0] = ans1[i][0];
total[k][1] = ans1[i][1];
k++;
i++;
j++;
} else {
total[k][0] = ans1[i][0];
total[k][1] = ans2[j][1];
k++;
i++;
j++;
}
} else {
total[k][0] = ans1[i][0];
total[k][1] = ans1[i][1];
k++;
i++;
j++;
total[k][0] = ans2[j][0];
total[k][1] = ans2[j][1];
k++;
i++;
j++;
}
}

for (int m = 0; m < total.length; m++)
result = Math.pow(total[m][0], total[m][1]);
return result;
}

}

我做了好久都不能通过……希望有哪位好心人帮帮我……谢谢!!

搜索更多相关主题的帖子: 最大公约数 
2006-04-08 20:38
cszero
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-4-8
收藏
得分:0 
最后一步应该有问题…………但是不知道why连求因子都求不到……555…………
2006-04-08 20:40
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

求最大公约数没有这么麻烦啊,用递归就很好解决啊
int GCD(int a,int b){
if(a%b==0)//当a除以b的余数为0的时候,返回b
return b;
else
return GCD(b,a%b);//当除不尽的时候,再调用这个方法重复以前的动作
}
这样岂不是方便了很多。


可惜不是你,陪我到最后
2006-04-09 11:16
cszero
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-4-8
收藏
得分:0 

谢谢你的答案!……但是那时老师叫我们做的题目吖……想了很久了……555…………

[此贴子已经被作者于2006-4-9 11:57:16编辑过]

2006-04-09 11:56
cszero
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-4-8
收藏
得分:0 
Who can help me??thx~
2006-04-09 17:51
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
help you?
about what?

可惜不是你,陪我到最后
2006-04-09 20:07
cszero
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-4-8
收藏
得分:0 
[CODE]
要计算两个数的最小公倍数,首先为每个整数创建一个素数因子表。表的第一列由所有素数因子组成,表的第二列是每个因子出现的次数。例如,120=2*2*2*3*5、150=2*3*5*5,因此120和150的素数因子表为
120的因子
次数
2
3
3
1
5
1
150的因子
次数
2
1
3
1
5
2
两个数的最小公倍数等于各因子出现的最大次数的乘积。例如120和150的最小公倍数等于2*2*2*3*5*5。
o对你程序用以下数据进行测试
(120,150)
     (7,14)
     (7,8)
     (1,2)
(345,455)
这道题要求用JAVA编程……我调了很久都做不出来,希望有热心人帮帮我…………谢谢!
我是大一学生,刚学java,觉得很有趣,我很想学好它!哈哈。。。希望有好心人指教一下我应该如何去学……
顺便问一下:JAVA的程序如果有错,应怎么办?(例如应该如何调试等等方法)谢谢!!
[/CODE]
2006-04-09 21:25
★王者至尊★
Rank: 1
等 级:新手上路
帖 子:528
专家分:0
注 册:2006-3-28
收藏
得分:0 
有难度  明天好好考虑...

------Java 爱好者,论坛小混混,学习中------
2006-04-09 22:39
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

最小公倍数也是一样的,不会很难.
public int LCM(int a,int b){
int biggest=a*b;//最大也就是两个乘积
for(int i=1;i<biggest;i++){
if(i%a==0&&i%b==0)//如果它除以a并且除以b的余数都为0的话,那就是了
return i;
}
return biggest;//如果没有找到,那就只有它是了
}


可惜不是你,陪我到最后
2006-04-10 14:23
晓狐狸
Rank: 2
等 级:新手上路
威 望:3
帖 子:95
专家分:0
注 册:2006-4-6
收藏
得分:0 

//************************这段代码送给你~我自己写的~虽然乱七八糟 不过可以用拉 还有界面
//可以算最小公倍数 还可以列出整数的素因子*********

import java.awt.*;
import java.awt.event.*;

class MathPrimeGene
{
public static void main(String [] args)
{
MathWindow mw = new MathWindow();
}
}

class MathWindow extends Frame
{
MathPanel mathPanel;
public MathWindow()
{
super("计算最小公倍数");
mathPanel = new MathPanel();
this.add(mathPanel);
this.setSize(335,200);
this.setResizable(false);
this.setVisible(true);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
e.getWindow().setVisible(false);
e.getWindow().dispose();
System.exit(0);
}
});
}
}
class MathPanel extends Panel
{
long [] text1;
long [] text2;
int [] text3={2,3,5,7,11,13,17,19,21,23,27};
Label labelText1;
Label labelText2;
Label commonMultiple;
TextField numText1;
TextField numText2;
TextArea numText1Prime;
TextArea numText2Prime;
Button countButton;
GridBagLayout gb;
GridBagConstraints gbc;

public MathPanel()
{
text1 = new long[20];
text2 = new long[20];
numText1 = new TextField("",10);
numText2 = new TextField("",10);
numText1Prime = new TextArea("",5,10);
numText2Prime = new TextArea("",5,10);
commonMultiple = new Label();
commonMultiple.setBackground(Color.red);
labelText1 = new Label("第一个数:");
labelText2 = new Label("第二个数:");
countButton = new Button("计算两数最小公倍数");
gb = new GridBagLayout();
gbc = new GridBagConstraints();

this.setLayout(gb);

gbc.fill = GridBagConstraints.HORIZONTAL;
this.addComponent(labelText1,0,0,1,1);
gbc.fill = GridBagConstraints.HORIZONTAL;
this.addComponent(numText1,0,1,1,1);

gbc.fill = GridBagConstraints.HORIZONTAL;
this.addComponent(labelText2,0,2,1,1);
gbc.fill = GridBagConstraints.HORIZONTAL;
this.addComponent(numText2,0,3,1,1);

gbc.fill = GridBagConstraints.HORIZONTAL;
this.addComponent(numText1Prime,1,0,1,2);
gbc.fill = GridBagConstraints.HORIZONTAL;
this.addComponent(numText2Prime,1,2,1,2);

gbc.fill = GridBagConstraints.HORIZONTAL;
this.addComponent(commonMultiple,2,0,1,4);

countButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(getNum())
{
countCommn();
}
}
});

gbc.fill = GridBagConstraints.HORIZONTAL;
this.addComponent(countButton,3,0,1,4);



}
private void addComponent(Component c,int row,int col,int nrow,int ncol)
{
gbc.gridx = col;
gbc.gridy = row;

gbc.gridwidth = ncol;
gbc.gridheight = nrow;

gb.setConstraints(c,gbc);
this.add(c);
}
public boolean getNum()
{
try
{
text1[0]=Long.parseLong(numText1.getText());
text2[0]=Long.parseLong(numText2.getText());
numText1Prime.setText("");
numText2Prime.setText("");
commonMultiple.setText("");
return true;
}
catch(Exception e)
{
commonMultiple.setText("请不要瞎输OK?");
numText1.setText("");
numText2.setText("");
return false;

}

}
public void countCommn()
{
for(int i=0,k=0,p=1;i<10;i++)
{
if(text1[0]%text3[k]==0&&text1[0]!=0)
{

text1[p++]=text3[k];
text1[0]/=text3[k];
}
else
{
++k;
getNum();
}
}
for(int i=0,k=0,p=1;i<10;i++)
{
if(text2[0]%text3[k]==0&&text2[0]!=0)
{
text2[p++]=text3[k];
text2[0]/=text3[k];
}
else
{
++k;
getNum();
}
}
for(int i=1;i<10;i++)
{
if(text1[i]!=0)
{
numText1Prime.setText(numText1Prime.getText()+text1[i]+',');
}
if(text2[i]!=0)
{
numText2Prime.setText(numText2Prime.getText()+text2[i]+',');
}
}
numText1Prime.setText(numText1Prime.getText()+"\n\n该整数的素因子列表");

numText2Prime.setText(numText2Prime.getText()+"\n\n该整数的素因子列表");

commonMultiple.setText("两个数是最小公倍数="+ma((int)text1[0],(int)text2[0]));

for(int i=0;i<20;i++)
{
text1[i]=0;
text2[i]=0;
}

}
public int ma(int a,int b)
{
int bc=a*b;
for(int i=1;i<bc;i++)
{
if(i%a==0&&i%b==0)
return i;
}
return bc;
}

}


2006-04-10 16:57
快速回复:[求助]求最大公约数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017967 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved