算术基本定理。。。
2015-02-26 16:15
204 查看
每个整数n>=2可唯一分解成素数的乘积;(这是我寒假闲的蛋疼给自己出的题目,并不严密)
现在输入一个n(n<=10000),要你分解成素数的乘积,结果由小到大排列。
输入:
180
110
250
输出:
2 2 3 3 5
2 5 11
2 5 5 5
代码:
并没有什么高大上的算法。。。
现在输入一个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 10000 int 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 ,x=0; if(p ==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 ==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]); else printf(" %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); else printf("Wrong!\n"); } return 0; }
并没有什么高大上的算法。。。
相关文章推荐
- Aladdin and the Flying Carpet LightOJ - 1341 (算术基本定理)
- 白话数论的基石:算术基本定理
- Aladdin and the Flying Carpet(算术基本定理)
- LightOJ 1236 Pairs Forming LCM(算术基本定理)
- Lightoj1341——Aladdin and the Flying Carpet(算术基本定理)
- hdu 4196 Remoteland 基本算术定理
- NEFU118 n!后面有多少个0【算术基本定理】
- 算术基本定理解析及其应用
- Aladdin and the Flying Carpet (算术基本定理)
- ACdream 1084 寒假安排 (算术基本定理)
- 良序原理:算术基本定理的证明
- LightOJ 1341 Aladdin and the Flying Carpet(算术基本定理)
- 分解质因数(算术基本定理)
- 初等数论之算术基本定理
- 算术基本定理
- LightOJ 1341 Aladdin and the Flying Carpet(算术基本定理)
- 算术基本定理
- lightOJ 1236 Pairs Forming LCM(算术基本定理)
- C - Aladdin and the Flying Carpet(算术基本定理)
- LightOJ 1341 - Aladdin and the Flying Carpet(算术基本定理啊)