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

 

posted @ 2017-04-06 18:57  夜雨声不烦  阅读(121)  评论(0编辑  收藏  举报