算术基本定理。。。

来源:互联网 发布:知乎 删除提问 编辑:程序博客网 时间:2024/04/28 00:44

每个整数n>=2可唯一分解成素数的乘积;(这是我寒假闲的蛋疼给自己出的题目,并不严密)

现在输入一个n(n<=10000),要你分解成素数的乘积,结果由小到大排列。

输入:

180

110

250

输出:

2 2 3 3 5

2 5 11

2 5 5 5

代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define N 10000int p[N+10];void screening(int p[]){memset(p,0,sizeof(p));p[1]=-1;for(int i=2;i*i<=N;i++){if(i==4)continue;for(int j=2;j*i<=N;j++){p[i*j]=-1;}}}void func(int n){int a[N],x=0;if(p[n]==0)printf("%d",n);else{for(int i=2,j=0;n;i++){if(n%i==0&&p[i]==0){a[j]=i;n/=i;j++;i--;x++;if(p[n]==0){a[j]=n;x++;break;}}}sort(a,a+x);for(int k=0;a[k]>0;k++){if(k==0)printf("%d",a[k]);elseprintf(" %d",a[k]);}}putchar(10);}int main(){int n;screening(p);//freopen("Data.txt","r",stdin);//freopen("Out.txt","w",stdout);while(scanf("%d",&n)!=EOF){if(n>1&&n<=10000)func(n);elseprintf("Wrong!\n");}return 0;}

并没有什么高大上的算法。。。

0 0
原创粉丝点击