zoukankan      html  css  js  c++  java
  • 25、求最大公约数和最大公倍数——循环

    求最大公约数和最大公倍数

    一、求三个数的最大公约数和最大公倍数

    /*
    	时间:2017年6月30日20:14:33
    	功能:求三个数的最大公约数与最小公倍数
    */ 
    
    # include <stdio.h>
    
    main() 
    { 
    	 int x, y, z, a, b, min, max; 
     
    	 printf("请输入三个整数以空格分隔:"); 
     
    	 scanf("%d %d %d", &x,&y,&z); 
    	 if(x<y)
    	 { 
    		min = x; max = y;
    	 }
    	 else 
    	 { 
    		min = y; max = x;
    	 }
    	 if(min>z)
    		min = z;								//求出三个数中最小数,赋给a;
    	 if(max<z)
    		max = z;								//求出三个数中最大数,赋给b;
     
    	 for(a=min;a>=1;a--)					//(最大公约数不可能大于三个数中的最小数)用这三数去除以a,a的值每次-1;
    											//也可以(a=1;a>=1;a++),或者(a=min;a<=min;a--)
    	 {
    		  if(x%a==0 && y%a==0 && z%a==0)	    //当三个数同时被a整除,此时a的值就是三个数的最大公约数;
    		  break;								// 停止a穷举;
    	 }
    	 for(b = max;;b++)						//(最小公倍数不会小于三个数中的最大数),起点用max赋值,可以减少无意义的穷举;
    											//(b = max;;b++)分号之间可以写做(b = max;b>=max;b++)留空也一样,但不能省略;号。
    	 {
    		  if(b%x==0 && b%y==0 && b%z==0)		//当b能被x、y、z同时整除,此时b的值就是三个数的最小公倍数;
    		  break;								// 停止b穷举;
    	 }
    
    	 printf("
    这三个数的最小数是:%d,最大数是:%d。
    ", min, max);
    	 printf("
    最大公约数是%d,最小公倍数是%d。
    
    ", a, b); 
     
    
     
    }
    /*
    在VC++6.0中执行的结果如下:
    -------------------------
    请输入三个整数以空格分隔:1 5 6
    
    这三个数的最小数是:1,最大数是:6。
    
    最大公约数是1,最小公倍数是30。
    
    -------------------------
    */
    

      

    二、求两个数的最大公约数和最大公倍数

    /*
    	2017年6月30日20:06:15
    	求两个数的最大公约数-辗转相除法。
    */
    # include <stdio.h>
    
    int main(void)
    { 
    	 int m, n, a, b, t;
    	 printf("请入要求的两个数,以空格分隔: m,n:");
    	 scanf("%d %d",&m, &n);
    	 if (m<n)
    	 {
    		 t = m;m = n;n = t;									// 先交换大小,保证被除数为大,除数为小;
    	 }
    	 a = m; b = n;
    	 do 
    	 {
    		  t=a%b;										    //用大数除小数,得出余数;
    		  a = b;											//将除数(小数)赋为被除数;
    		  b = t;											//余数赋为除数,直到余数为0时跳出循环;
    	 }	
    	 while(b!=0);											//也可以写成while(t!=0);
     
    	 printf("最大公约数为:%d
    ", a);						//a的值即为最大公约数;
     
    	 printf("最小公倍数为:%d
    ", m*n/a);
    
     return 0;
    }
    

    三、求最大公约数 

    /*
    	2017年3月16日20:42:14
    	功能:求最大公约数
    */
    #include"stdio.h"
    int fun(int, int);
    int main()
    {
    	int a, m, n, i, j, x, y, k = 1, flage;
    	int q[100];
    	int p[100];
    	printf("请输入两个数,a和b,用空格隔开:");
    	scanf("%d %d", &m, &n);
    	for (i = 1,x =0;i <= m; i++)									//依次取出可以整除的数放入到整型数组中,注意整型数组末尾不需要加上结尾标识符''
    		if(m % i ==0)
    			q[x++] = i;
    
    	for (i = 1,y =0;i <= n; i++)
    		if(n % i ==0)
    			p[y++] = i;
    
    	for (i = 0; i < x; i++)											//从一个整型数组中依次取数,与另一个整型数组中的数据相比较,如果相等且大于1,则返回跳出内循环,直到数组中的所有数据全部比较完,则跳出所有循环
    		for(j =0; j < y;j++)
    			if(q[i] == p[j] && q[i]>1)								
    			{
    				a = q[i];
    				flage = 1;
    				break;
    			}
    
    	if(flage == 1)
    		printf("%d 和 %d 的最大公约数是%d
    ", m, n, a);
    	else
    		printf("%d 和 %d 的最大公约数是%d
    ", m, n, k);
    }
    
    /*	
    	总结:
    	1、最大公约数的定义:几个数的公因子,并且因子在公因子中最大
    	2、在VC++6.0中显示的结果:
    	————————————————————————————
    	请输入两个数,a和b,用空格隔开:5 6
    	5 和 6 的最大公约数是1
    
    	请输入两个数,a和b,用空格隔开:9 12
    	9 和 12 的最大公约数是3
    	————————————————————————————
    */
    

      

     

  • 相关阅读:
    kudu 存储引擎简析
    Kudu vs HBase
    HBase原理–所有Region切分的细节都在这里了
    4月第3周业务风控关注 | 文化部再次审查直播和游戏产品,已下架4939款直播应用
    知物由学 | 如何应对日益强大的零日攻击
    Apache 流框架 Flink,Spark Streaming,Storm对比分析(二)
    Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)
    poj1637Sightseeing tour(混合图欧拉回路)
    计算机网络_学习笔记 第一章 概述
    [Codecademy] HTML&CSS 第三课:HTML Basic II
  • 原文地址:https://www.cnblogs.com/wxt19941024/p/7100533.html
Copyright © 2011-2022 走看看