|
发表于 2013-7-2 10:15:58
|
显示全部楼层
- //分解质因数
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- using namespace std;
- const int MAXN = 2001000;
- const int PSIZE = 100000;
- int plist[PSIZE], pcount=0;
- //先调用initprime()
- void initprime();
- //prime_factor()传入n, 返回不同质因数的个数
- //f存放质因数,nf存放对应质因数的个数
- int prime_factor(int n, int* f, int *nf);
- //打印结果
- void print_result(int n, int* f, int *nf);
- int main () {
- initprime();
- int input_data = -1;
- int result[500];
- int result_cnt[500];
- while( cin>>input_data ) {
- int numbers = prime_factor( input_data, result, result_cnt );
- print_result( numbers, result, result_cnt );
- }
- }
- int prime(int n){
- int i;
- if ((n!=2&&!(n%2))||(n!=3&&!(n%3))||(n!=5&&!(n%5))||(n!=7&&!(n%7)))
- return 0;
- for (i=0;plist[i]*plist[i]<=n;++i)
- if (!(n%plist[i]))
- return 0;
- return n>1;
- }
- void initprime(){
- int i;
- for (plist[pcount++]=2,i=3;i<100000;++i)
- if (prime(i))
- plist[pcount++]=i;
- }
- int prime_factor(int n, int* f, int *nf) {
- int cnt = 0;
- int n2 = sqrt((double)n);
- for(int i = 0; n > 1 && plist[i] <= n2; ++i)
- if (n % plist[i] == 0) {
- for (nf[cnt] = 0; n % plist[i] == 0; ++nf[cnt], n /= plist[i]);
- f[cnt++] = plist[i];
- }
- if (n > 1) nf[cnt] = 1, f[cnt++] = n;
- return cnt;
- }
- void print_result(int n, int* f, int *nf) {
- for( int i=0;i<n;++i ) {
- if(i!=0) cout<<"*";
- cout<<f[i];
- for( int j = nf[i]-1; j!=0; --j ) {
- cout<<"*"<<f[i];
- }
- }
- cout<<endl;
- }
复制代码 给你个代码参考 |
|