最大公因数、最小公倍数、因式分解

最大公因数使用辗转相除法来求,最小公倍数则由这个公式来求。

最大公因数*最小公倍数=两数乘积

 解法最大公因数可以使用递归与非递归求解,因式分解基本就是使用小于输入数的数值当作除数,去除以输入数值,如果可以整除就视为因数,要比较快的解法就是求出小于该数的所有质数,并试试看是不是可以整除,求质数是另一个问题,请参考Eratosthenes筛选求质数。

一、求最大公因数、最小公倍数

#include<stdio.h>

#include<stdlib.h>

int main(void){

int m,n,r;

int s;

printf("请输入两个数:");

scanf("%d %d",&m,&n);

s=m*n;

while(n!=0)

{

r=m%n;

m=n;

n=r;

}

printf("最大公倍数:%d\n",m);

printf("最小公约数:%d\n",s/m);

return 0;

}

二、因式分解

void Resolve(int n)

{

int i;

printf("%d=",n);

for(i=2;i*i<=n;)

{

if(n%i==0)

{

printf("%d*",i);

n/=i;

}

else

i++;

}

printf("%d\n",n);

}

时间: 2024-07-30 10:20:52

最大公因数、最小公倍数、因式分解的相关文章

辗转相除法 最大公因数 + 最小公倍数

//辗转相除法 最大公因数 + 最小公倍数 #include<stdio.h> void yinshu(int a,int b){ int temp; while(a % b != 0){ temp = a; a = b; b = temp % b; } printf("%d\n",b); } void beishu(int a,int b){ int a1 =a; int b1 = b; int t; while(a%b != 0){ t = a; a= b; b = t

经典算法问题的java实现 (一)

原文链接: http://liuqing-2010-07.iteye.com/blog/1396859 1.如何计算闰年(Leap Year)?   四年一闰:百年不闰:四百年再闰.   具体参照:http://baike.baidu.com/view/3085625.htm Java代码   boolean isLeapYear(int year) { return (year%4 == 0 && year%100 !=0) || (year%400 == 0); } 2.如何判断一个数

欧几里德公式求最大公因数和最小公倍数

如下: #include<stdio.h> int gcd(int a,int b){ int temp; if(b > a){ temp = b; b = a; a = temp; } while(b){ temp = a%b; a = b; b = temp; } return a; } int lcm(int a,int b,int gcd){ int temp; if(b > a){ temp = b; b = a; a = temp; } return (a/gcd)*b

Python小代码_13_生成两个参数的最小公倍数和最大公因数

def demo(m, n): if m > n: m, n = n, m p = m * n while m != 0: r = n % m n = m m = r return (int(p / n), n) val = demo(20, 30) print('最小公倍数为:', val[0]) print('最大公因数为:', val[1]) #输出结果 #最小公倍数为: 60 #最大公因数为: 10 原文地址:https://www.cnblogs.com/chuangming/p/84

最大公因数和最小公倍数

package ;import java.util.Scanner;public class  { public static void main(String[] args) {          Scanner in = new Scanner(System.in);          System.out.print("input x :");          int x = in.nextInt();          System.out.print("input

寻找最大公因数和最小公倍数

package 寻找公因数;import java.util.Scanner;public class 寻找公因数 { public static void main(String[] args) {          Scanner in = new Scanner(System.in);          System.out.print("input x :");          int x = in.nextInt();          System.out.print(&

最大公约数(gcd)和 最小公倍数(lcm)——辗转相除法

辗转相除法(又称欧几里得算法)是求最大公因数的算法 要求a,b的最大公约数(a>b),我们可以递归地求b,a%b的最大公约数,直到其中一个数变成0,这时另一个数就是a,b的最大公约数. C++实现: int gcd(int a,int b){ retuen b?gcd(b,a%b):a; } 或: while(b!=0)  {  temp=a%b;   a=b;   b=temp; } 证明:(引自百度百科) 设两数为a.b(b<a),用gcd(a,b)表示a,b的最大公约数,r=a (mod

如何求两个数的最大公约数和最小公倍数

最大公约数:也称最大公因数.最大公因子,指两个或多个整数共有约数中最大的一个. 最小公倍数:几个数共有的倍数叫做这几个数的公倍数,其中除1以外最小的一个公倍数,叫做这几个数的最小公倍数. 特点:

hdu_1108 最小公倍数

//(a,b)最小公倍数=a*b/(a,b)最大公因数 //最大公因数用欧几里得定律求(这里不证明)可百度(说实话我好想不会orz) #include<bits/stdc++.h> using namespace std; int gcd(int x,int y){ return y==0?x:gcd(y,x%y); } int main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF){ printf("%d