codevs 2804 最大最小数质因数 x

Posted 云深不知处

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codevs 2804 最大最小数质因数 x相关的知识,希望对你有一定的参考价值。

                     题目描述 Description

    先输入n,n<=20;再依次输入n个不同的数,每个数<=1000000;找出最大数和最小数,并输出最大最小数的质因数,没有质因数则输出0。

输入描述 Input Description

数n,空行,输入n个数,每个数中间空行;

输出描述 Output Description

最大数的质因数,每个数中间空格;
最小数的质因数,每个数中间空格.

样例输入 Sample Input

2
15 6

样例输出 Sample Output

3 5
2 3

数据范围及提示 Data Size & Hint

分类标签 Tags

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>

using namespace std;

int n;//n<=20
long long a[21];

bool pd(long long s)//1为真 
{
    long long j;
    if(s==2) return 1;
    j=2;
    while(s%j!=0&&j<=sqrt(s)) j++;
    if(s%j==0) return 0;
    else return 1;
}

void print(long long x)
{
    long long t=x;
    if(x==1||pd(x)||x==0)//如果该数为素数或是为1,0,则没有质因数 
    {
        printf("0\n");
        return;
    }
    for(int i=2;i<=x/2;i++)//分解质因数重要的一步 
        if(x%i==0&&pd(i))
        {
            printf("%d ",i);
            t=t/i;
            if(t==1) break;//不能够继续分解了,跳出 
        }
    printf("\n");
}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+1+n);//最后一个为最大数,第一个为最小数 
    print(a[n]);
    print(a[1]);
    return 0;
}

 

以上是关于codevs 2804 最大最小数质因数 x的主要内容,如果未能解决你的问题,请参考以下文章

c语言,用分解质因数的方法求两个数的最大公约数

[CODEVS1915] 分配问题(最小费用最大流)

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

求两个正整数的最大公因数和最小公倍数

如何求两数的最大公约数?

codevs1907方格取数3(最大流最小割定理)