zoukankan      html  css  js  c++  java
  • 天梯题目解答——1012、1430

    1012 最大公约数和最小公倍数问题

    题目描述 Description

    输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数

    条件:  1.P,Q是正整数;2.要求P,Q以x0为最大公约数,以y0为最小公倍数.

    试求:满足条件的所有可能的两个正整数的个数.

    输入描述 Input Description

    二个正整数x0,y0

    输出描述 Output Description

    满足条件的所有可能的两个正整数的个数

    样例输入 Sample Input

    3 60

    样例输出 Sample Output

    4

    #include <iostream>
    using namespace std;
    
    #define MAX 10000
    
    int LCM(int min, int max, int ev)
    {
        int temp;
        while(min!=0)
        {
            temp = min;
            min = max%min;
            max = temp;
        }
        if(max==ev)
            return 1;
        else
            return 0;
    }
    
    int main()
    {
        int num[MAX];
        int x,y;
        cin >> x >> y;
        int p[MAX],q[MAX];
        int count=0;
        for(int i=x;i<=y;i+=x)
        {
            if(y%i==0){
                num[count] = i;
                cout << num[count] << " ";
                count++;
            }
        }
        cout << endl;
        int a,b,k=0;
        if(y%x==0)
        {
            p[0]=x;q[0]=y;
            cout << x << " " << y << endl;
            k++;
        }
        for(int i=1;i<count;i++)
        {
            a = num[i];
            for(int j=i+1;j<count;j++)
            {
                b = num[j];
                if((LCM(a,b,x)) && (a*b/x == y))
                {
                    p[k] = a;
                    q[k] = b;
                    k++;
                    cout << a << " " << b << endl;
                }
            }
        }
        cout << (k<<1);
        return 0;
    }

      首先对于输入的x,y;找出基 础的num矩阵,num中存储的是[x,y]之间以x为倍数且为y约数的值。

      对于num中的值,寻找符合条件的p、q值,可以先判断(x,y)是否满足p、q的要求,只要q为p的倍数即可,比较容易,也可以放在后面一起,只要下面for循环的i从0开始即可。

      LCM函数用于判断两个数的最大公约数是否为x,在确定公约数为x的基础上确定是否最小公倍数为y。最大公约数是x、y循环取余,知道最后余数为0,为0时候的分母就是最大公约数,但因为循环判断在交换之后,所以分母已经存到max上了。

      最后得出k的个数乘2就是p、q的总个数了。

    1430 素数判定

    题目描述 Description

    质数又称素数指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数

    素数在数论中有着很重要的 地位。比1大但不是素数的数称为合数。1和0既非素数也非合数。质数是与合数相对立的两个概念,二者构成了数论当中最基础的定义之一。基于质数定义的基础 之上而建立的问题有很多世界级的难题,如哥德巴赫猜想等。算术基本定理证明每个大于1的正整数都可以写成素数的乘积,并且这种乘积的形式是唯一的。这个定 理的重要一点是,将1排斥在素数集合以外。如果1被认为是素数,那么这些严格的阐述就不得不加上一些限制条件。

    概念

    只有1和它本身两个约数的自然数,叫质数(Prime Number)。(如:由2÷1=2,2÷2=1,可知2的约数只有1和它本身2这两个约数,所以2就是质数。与之相对立的是合数:“除了1和它本身两个 约数外,还有其它约数的数,叫合数。”如:4÷1=4,4÷2=2,4÷4=1,很显然,4的约数除了1和它本身4这两个约数以外,还有约数2,所以4是 合数。)
    100以内的质数有2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,在100内共有25个质数。
    注:(1)1既不是质数也不是合数。因为它的约数有且只有1这一个约数。
    (2)2和3是所有素数中唯一两个连着的数 .

    输入描述 Input Description

    第一行输入一个正整数n,n<=30000

    输出描述 Output Description

    如果该数是质数,则输出

    否则输出

    样例输入 Sample Input

    输入样例1

    13

    输入样例2

    8

    样例输出 Sample Output

    样例输出1

    样例输出2

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int x;
        cin >> x;
        if(x==1){
            cout << "\n";
            return 0;
        }
        else if(x==2 || x==3){
            cout << "\t";
            return 0;
        }
    
        int n=2,ev;
        while(n<x/2)
        {
            ev = x%n;
            if(ev==0){
                cout << "\n";
                return 0;
            }
            n++;
        }
        cout << "\t";
        return 0;
    }

      这题注意下输出就行了。

  • 相关阅读:
    JavaScript-数学对象与定时器
    JavaScript(八)-字符串与数组
    嵌入式的笔试题目(1)
    更改登录使用的默认shell的方法
    查看当前Linux 命令行使用的shell 的方法
    启动引导程序 Bootloader
    Debian 系(Deepin, Ubuntu, Linuxmint等)包管理工具
    ubuntu 服务器 samba 局域网内 如何添加samba user
    win10 和 树莓派3b+ 处于同一wifi环境(同一网段), win10 无法ping 通 树莓派3b+
    数据结构概念
  • 原文地址:https://www.cnblogs.com/heyuheitong/p/4019057.html
Copyright © 2011-2022 走看看