一般,欲求最小公倍数,先求最大公约数。输入/输出部分你自己写了,这里只是简单用C语言表示使用欧几里德算法:gcd(a,b) = gcd(b,a mod b)进行计算的部分。理解这个算法是关键,可以参考网络上的相关解释或者相关书籍上的解释。 输入部分/ input /略。 处理部分先求最大公约数,用递归形式表示欧几里德算法。如果理解了算法,看上去是非常舒服(简单)的。/ greatest common divisor /int gcd(int a, int b){ return b == 0 ( a : gcd(a%b));} 通过最大公约数,再求最小公倍数。/ least common multiple /int lcm(int a, int b) { return a b / gcd (a, b);} 输出部分/output/略。
是武科大的吗?
import javautilScanner;
public class Sy6_29 {
public static void main(String[] args) {
Scanner scanner = new Scanner(Systemin);// 获得两个数
Systemoutprintln("请输入整数a:");
int a = scannernextInt();
Systemoutprintln("请输入整数b:");
int b = scannernextInt();
scannerclose();
int q1=(int)(a/2);
int q2=(int)(b/2);
//int q=q1+q2;
//int table[][]=new int[q][2];
int tableone[][]= new int[q1][2];
int tabletwo[][]= new int[q2][2];
int m=0,n=0;
for (int i = 2, j = (int)(a/2); i <= j; i++) {
if (a % i == 0 && isNeed(i)) {// 先判断是否整除,再判断是否是素数
tableone[m][0]=i;
tableone[m][1]=getCount(a, i);
m++;
}
}
Systemoutprintln(a + "的素数因子列表: ");// 打出a的素数因子
for (int i = 0, j = q1; i < j; i++) {
if ( tableone[i][0]!=0)
Systemoutprint(tableone[i][0] + ", ");
}
Systemoutprintln();
Systemoutprintln(a + "的素数因子出现次数: ");// 打出a的各因子出现次数
for (int i = 0, j =q1; i < j; i++) {
if ( tableone[i][1]!=0)
Systemoutprint(tableone[i][1] + ", ");
}
Systemoutprintln();
for (int i = 2, j = (int)(b/2); i <= j; i++) {
if (b % i == 0 && isNeed(i)) {
tabletwo[n][0]=i;
tabletwo[n][1]=getCount(b, i);
n++;
}
}
Systemoutprintln(b + "的素数因子列表: ");// 打出b的素数因子
for (int i = 0, j = q2; i < j; i++) {
if ( tabletwo[i][0]!=0)
Systemoutprint(tabletwo[i][0] + ", ");
}
Systemoutprintln();
Systemoutprintln(b + "的素数因子出现次数: ");// 打出b的各因子出现次数
for (int i = 0, j =q2; i < j; i++) {
if ( tabletwo[i][1]!=0)
Systemoutprint(tabletwo[i][1] + ", ");
}
Systemoutprintln();
//int u=0;
for(int i=0;i<q1;i++){
for(int j=0;j<q2;j++){
if (tableone[i][0]==tabletwo[j][0]){
//table[i][0]=tableone[i][0];
int s1=tableone[i][1];
int s2=tabletwo[j][1];
if(s1<s2)
{tableone[i][1]=tabletwo[j][1];
tabletwo[j][1]=0;
}
else tabletwo[j][1]=0;
//else table[u][1]= tabletwo[i][1];
//tableone[i][1]=tabletwo[j][1]=0;
}
}
}
double g=1;
for(int j=0;j<q1;j++){
g=gjavalangMathpow((double)tableone[j][0],(double)tableone[j][1]);
}
for(int k=0;k<q2;k++){
g=gjavalangMathpow((double)tabletwo[k][0],(double)tabletwo[k][1]);
}
Systemoutprintln(a + "和" + b + "的最小公倍数是:"+(int)g);
}
// 判断是否是素数
public static boolean isNeed(int a) {
for (int i = 2, j = (int)(a/2); i <= j; i++) {
if (a % i == 0) {
return false;
}
}
return true;
}
// 求a的因子i出现次数
public static int getCount(int a, int i) {
int count = 0;
while (a % i == 0) {
count++;
a = a / i;
}
return count;
}
}
不是自夸,我也算一高手。看懂这笨算法就几秒的事情。很简单,程序如下 #include /因为是库,最好将双引号改成尖括号/ int fun(int a,int b,int c){/求3个参数中的最大值,前面最好加返回类型int/ if(a>=b&&a>=c) return(a); else if(b>=a&&b>=c) return(b); else return(c); } void main(){/加一个void,否则警告。不同编译器有不同处理/ int a,b,c,i=1,j,k; scanf("%d%d%d",&a,&b,&c); k=fun(a,b,c);/最大值是k/ while(1){ j=ki; if(j%a==0&&j%b==0&&j%c==0) break;/j能被3个数整除/ i++; } printf("%d",j);/j是最小公倍数/ return; }
#include"stdioh"
main()
{
int m,n,t,h,a,b,q;
printf("("%d%d",a=m;
b=n
{ h=n;n=m%n;m=n;}
a=a/n;b=b/n;q公约数为 %d,最小公倍数
#define _CRT_SECURE_NO_WARNINGS
#include <stdlibh>
#include <stringh>
#include <stdioh>
int max1(int a ,int b){
if (a<=b)
return b;
else return a;
}
void main()
{
int a=6;
int b=4;
int max;
printf ("请输入a b 的值:");
scanf("%d %d",&a,&b);
max = max1(a,b);
while (max%a!=0|| max%b!=0){
max++;
}
printf("最小公倍数为: %d\n",max);
system("pause");
}
以上就是关于急求用 c语言编写一个程序求两个数的最小公倍数,越简单越好。全部的内容,包括:急求用 c语言编写一个程序求两个数的最小公倍数,越简单越好。、编写程序求最小公倍数、求三个数的最小公倍数的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)