首页 > 代码库 > 天梯题目解答——1012、1430

天梯题目解答——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 10000int 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

如果该数是质数,则输出\t

否则输出\n

样例输入 Sample Input

输入样例1

13

输入样例2

8

样例输出 Sample Output

样例输出1

\t

样例输出2

\n

 

#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;}

 

  这题注意下输出就行了。

 

天梯题目解答——1012、1430