ZZULIOJ【1071】分解质因子【数学】&&【函数】

来源:互联网 发布:网络诗歌 编辑:程序博客网 时间:2024/06/07 05:36

1071: 分解质因子

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 7640  Solved: 4170

SubmitStatusWeb Board

Description

将一个正整数分解质因数,例如,输入90,输出2 3 3 5。

Input

输入一个正整数n(2<=n<=2000)。

Output

从小到大输出n的所有质因子,每两个数之间空一格。

Sample Input

20

Sample Output

2 2 5

注意:输出时两个数字之间有一个空格,最后一个数字后面没有空格。


解析:
         博主拿到这道题的时候首先想到的就是构造函数。质因子需要满足质数和因子,我们可以构造一个函数判断因子是否为质数。
大致思路就是这样。可是博主遇到了一个问题,如果单纯的用for来找寻数的因子,例如20,找到第一个质因子2之后,i++变成3,
所以第二个2就找不出来,输出结果就是2 5.所以每找到一个质因子我们都需要从1开始重新判断。


程序如下:
#include<cstdio>#include<cmath>#include<algorithm>using namespace std;bool cmp(int a,int b){return a<=b;}int prime(int n){int flag=1,i;if(n==1)    flag=0;    for(i=2;i<n;i++)         if(n%i==0)       flag=0;if(flag==1)    return 1;else    return 0;}int main(){int n;scanf("%d",&n);int i,j=0,a[10003];for(i=2;i<=n;i++){if(n%i==0&&prime(i)==1){a[j++]=i;    n=n/i;    i=0;}  }sort(a,a+j,cmp);for(i=0;i<j;i++)    printf("%d%c",a[i],i==j-1?'\n':' ');    return 0;}