C语言题目,输入两个正整数m和n,求其最大公约数和最小公倍数
调整顺序使m>=n
循环
m=m%n; 如果m=0,则n为最大公约数,跳出循环。注:%表示取余运算。
n=n%m; 如果n=0,则m为最大公约数,跳出循环。
next
求出最大公约数G后,用m*n/G得到最小公倍数。
很简单
例如 12 36
最大公约数 最大公约数 最大也就和最小的那个数一样大 否则就没办法约了
因此 循环 找到后 输出 break出循环 for (i=12;i>=0;i--)
if (大数%i==0 && 小数%i==0 )找到输出
break;
最小公倍数 =肯定最小也要和最大的数一样 不可能小于最大的数 否则就不能做最大数的倍数
因此 循环 找到后 输出 break出循环 for (i=36;;i++)
if(大数%i==0 && 小数%i==0)
找到输出 break
#include <stdio.h>
#include <math.h>
main()
{
int m,n,a,b,c,d;
printf("Please enter two integer:");
scanf("%d %d",&m,&n);
d=m*n;
if(m<n)
{
a=n;
n=m;
m=a;
}
for(b=m%n;b!=0;b=m%n)
{
m=n;
n=b;
}
c=d/n;
printf("最大公约数为%d\n",n);
printf("最小公倍数为%d\n",c);
}
输入两个正整数m和n, 求其最大公约数和最小公倍数.
用辗转相除法求最大公约数
算法描述:
m对n求余为a, 若a不等于0
则 m <- n, n <- a, 继续求余
否则 n 为最大公约数
最小公倍数 = 两个数的积 / 最大公约数
#include
int main()
{
int m, n;
int m_cup, n_cup, res; /*被除数, 除数, 余数*/
printf("Enter two integer:\n");
scanf("%d %d", &m, &n);
if (m > 0 && n >0)
{
m_cup = m;
n_cup = n;
res = m_cup % n_cup;
while (res != 0)
{
m_cup = n_cup;
n_cup = res;
res = m_cup % n_cup;
}
printf("Greatest common divisor: %d\n", n_cup);
printf("Lease common multiple : %d\n", m * n / n_cup);
}
else printf("Error!\n");
return 0;
}
★ 关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下:
约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”
其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。
辗转相除法求最大公约数,是一种比较好的方法,比较快。
对于52317和75569两个数,你能迅速地求出它们的最大公约数吗?一般来说你会找一找公共的使因子,这题可麻烦了,不好找,质因子大。
现在教你用辗转相除法来求最大公约数。
先用较大的75569除以52317,得商1,余数23252,再以52317除以23252,得商2,余数是5813,再用23252做被除数,5813做除数,正好除尽得商数4。这样5813就是75569和52317的最大公约数。你要是用分解使因数的办法,肯定找不到。
那么,这辗转相除法为什么能得到最大公约数呢?下面我就给大伙谈谈。
比如说有要求a、b两个整数的最大公约数,a>b,那么我们先用a除以b,得到商8,余数r1:a÷b=q1…r1我们当然也可以把上面这个式子改写成乘法式:a=bq1+r1------l)
如果r1=0,那么b就是a、b的最大公约数3。要是r1≠0,就继续除,用b除以r1,我们也可以有和上面一样的式子:
b=r1q2+r2-------2)
如果余数r2=0,那么r1就是所求的最大公约数3。为什么呢?因为如果2)式变成了b=r1q2,那么b1r1的公约数就一定是a1b的公约数。这是因为一个数能同时除尽b和r1,那么由l)式,就一定能整除a,从而也是a1b的公约数。
反过来,如果一个数d,能同时整除a1b,那么由1)式,也一定能整除r1,从而也有d是b1r1的公约数。
这样,a和b的公约数与b和r1的公约数完全一样,那么这两对的最大公约数也一定相同。那b1r1的最大公约数,在r1=0时,不就是r1吗?所以a和b的最大公约数也是r1了。
有人会说,那r2不等于0怎么办?那当然是继续往下做,用r1除以r2,……直到余数为零为止
先用 辗转相除法 求出最大公约数,然后m*n再除以最大公约数就是最小公倍数
C语言 求大神改成正确的 题目是:输入两个整数num1和num2,计算并输出它...
include<stdio.h>int main(){int num1,num2; scanf("%d%d",&num1,&num2); printf("%d+%d=%d\\n",num1,num2,num1+num2); printf("%d-%d=%d\\n",num1,num2,num1-num2); printf("%d*%d=%d\\n",num1,num2,num1*num2); if(num2==0) {printf("除数不能为0!\\n");return...
C语言编程题目
下面是一些C编程题目:1. 编写程序,从键盘输入两个整数,输出它们的和、差、积、商、余数。2. 编写程序,从键盘输入三角形的三条边长,判断它们是否可以构成三角形,并输出三角形的类型(等边、等腰、一般)。3. 编写程序,从键盘输入字符串,统计其中的大写字母、小写字母、数字和其他字符的个数,并...
一道c语言的计算题。求细致一点的讲解~~~追加!!
题目:输入两个整数 x 和 y,求它们的和、差、积、商、余数。这是一道比较基础的 C 语言计算题目,可以通过输入两个整数,然后使用加、减、乘、除等运算符进行计算,最后输出结果。下面是一份示例代码,给你参考:include <stdio.h> int main() {int x, y;printf("请输入两个整数:\\n");sc...
C语言编程,如何输入两个正整数,输出其中不是共有的数字?
输出格式:在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。输入样例:10 3 -5 2 8 0 3 5 -15 9 10011 6 4 8 2 6 -5 9 0 100 8 1输出样例:3 5 -15 6 4 1 我的想法是先...
一道C语言题目,多谢啦! 输入两个非负整数m,n(n>=m) 输出[m,n]区间里...
int main(int argc,char *argv[]){ int n,m,a,b;printf("Enter n & m(int 0<=m<=n)...\\n");if(scanf("%d%d",&m,&n)!=2 || m<0 || m>n){ printf("Input error, exit...\\n");return 0;} for(a=0;a*a<m;a++);for(b=0;b*b<=n;b++);printf("%d~%d: ...
c语言输入两个整数a和b求和是什么?
printf("请输入两个整数:");scanf("%d %d",&a,&b);\/\/ sum=a+b;\/\/三、数据处理,把a、b的和赋值给sum;printf("这两个数的和是:%d\\n",sum);\/\/ return 0;\/\/返回;C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的...
C语言 这是一个很简单的题目,给定2个整数A和B,请输出A+B的和。_百度...
include int main(){ int a,b;scanf("%d%d",&a,&b);printf("%d\\n",a+b);return 0;}
C语言题目。输入a和b两个整数,判断b是否为a的整数。是输出“yes”,反 ...
include <stdio.h>int main(){ int a,b; scanf("%d%d",&a,&b); puts(a%b?"no":"yes"); return 0;}
如何用C语言输入两个整数并求余数?
首先求余数的符号是%。同为在学C语言的学生,有见过一些类似的题目:求输入的两个数a除以b的余数。我们以t作为最后求出的余数。具体解题方法如下:int a,b,t; \/\/这里因为求出的余数不可能是小数,所以用整型。scanf("%d%d%d",&a,&b,&t);t=a%b; \/\/最核心的就是这一步,求余数。
C语言的题:输入两个整数,先输出较小的数,再输出较大的数?
include <stdio.h> void main(){ int a,b;scanf("%d%d",&a,&b);a>b?printf("%d %d",b,a):printf("%d %d",a,b);}
暴昨禾乐: #include <stdio.h> void main() {//计算阶乘数的加和float i,m,n,ji=1,sum=0,sum1=0,sum2=0;scanf("%f",&m);scanf("%f",&n);for(i=1;i<=m;i++){ji*=i;sum1+=ji;}for(i=1;i<=n;i++){ji*=i;sum2+=ji;}sum0=sum1+sum2;printf("阶乘的加和结果是:%.2f\n",sum0); }
北碚区18731984116: 设计一个C程序解决这个题:输入两个正整数m和n,求其最大公约数和最小公倍数.写出完整的程序 - ?
暴昨禾乐:[答案] #include void main() { int a,b,m,n,p,t; printf("请按顺序输入a和b\n"); scanf("%d,%d",&a,&b); p=a*b; do {m=a%b;t=b;a=b;b=m; } while(m!=0); n=p/t; printf("a和b的最大公约数是%d\n最小公倍数是%d\n",t,n); }...
北碚区18731984116: c语言输入两个正整数m和n,求出[m,n]区间的所有素数 - ?
暴昨禾乐: for(j=2;j<=i;j++) { if(i%j==0) break; } if(j==i) { a[x]=i; x++; } 这段代码,你不感觉无论是哪一个数,都会被记录下来,最后输出吗?后面改成if(j!=i)//保证不是因为除以自身而跳出上面寻个循环的 { a[x]=i; x++; }
北碚区18731984116: C语言输入两个整数m和n,计算1/m!与1/n!之和,保留小数点后四位.样例输入1 3样例输出1.1667 - ?
暴昨禾乐: #include int main() { int jiecheng(int data); int m,n; printf("输入两个整数m和n:"); float sum; scanf("%d%d",&m,&n); sum = 1.0/jiecheng(m) +1.0/jiecheng(n); printf("1/%d!
北碚区18731984116: C语言:输入两个正整数m和n(要求m〈=n)求m!+(m+1)!+……n! 谢啦 - ?
暴昨禾乐: #include "stdio.h" main() {int m,n,i;long int sum=1,sum1=1,sum2=1,t;printf("请输入m>n\n");scanf("%d",&m);scanf("%d",&n);while(m {clrscr();printf("请重新输入m,n\n");scanf("%d",&m);scanf("%d",&n);...
北碚区18731984116: 任意输入两个正整数m和n,求m!+n!的值.c语言怎么写 - ?
暴昨禾乐: 考虑Int最大存储到16的阶乘, 再大就会导致数据溢出. 所以可以用double来存放阶乘的结果. 楼上:古风的程序,fun函数定义成double,却又定义了int的y来存储阶乘结果... 无语.. #include __int64 fun(int a) { if(a<=1) return 1; else return a*fun(a-1); } int main() { __int64 sum=0; int m,n; scanf("%d%d",&m,&n); sum=fun(m)+fun(n); printf("结果为:%I64d\n",sum); return 0; }
北碚区18731984116: C语言:输入两个正整数m和n(m≥1,n≤500),输出m和n之间的所有素数,每行输出6个 - ?
暴昨禾乐: if(flag==1&&n!=1) 这里错了你少了=
北碚区18731984116: c语言程序题,输入两个正整数m和n,求其最大公约数和最小公倍数. - ?
暴昨禾乐: #include "stdio.h" int main(void){ int a,b,t; while(1){ printf("Input a & b(int a,b>0)...\n"); if(scanf("%d%d",&a,&b)==2 && a>0 && b>0){ if(a>b) a^=b,b^=a,a^=b; t=b; while(b%a) b+=t; printf("The GCD is %d\n",b/a); printf("The LCM is %d\n",b); break; } printf("Error, redo. "); fflush(stdin); } return 0; }
北碚区18731984116: C语言程序设计问题:输入两个正整数m和n,求其最大公约数哥最小公倍数(最好简单一点的) - ?
暴昨禾乐: //希望我的回答对你的学习有帮助#include int main(){ int p,r,n,m,temp; printf("请输入两个正整数n,m:"); scanf("%d%d",&n,&m); if (n temp=n; n=m; m=temp; } p=n*m; while(m!=0){ r=n%m; n=m; m=r; } printf("它们的最大公约数为:%d\n",n); printf("们的最小公约数为:%d\n",p/n); return 0; }
北碚区18731984116: C语言从键盘输入两个整数m和n,用min表示其中较小的一个 - ?
暴昨禾乐: 按照你的要求编写的求最大公约数的C语言程序如下1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23#include<stdio.h> intmain(){intn,m,min,i,div=0,flag=0;printf("输入两个整数n和m:");scanf("%d %d",&n,&m);if(n>m) min...