庞维邦吧 关注:4贴子:111
  • 1回复贴,共1
分解质因数
问题描述
输入n,按照质因子从小到大的顺序输出n分解质因数的形式。
即输出n = a1^p1*a2^p2*…ak^pk。
注意pi至少要等于1,若pi = 1,(^pi)忽略不写。
例如:6 = 2*3
12 = 2^2*3
19 = 19
输入格式
第一行为一个大于1的正整数n,n ≤ 10000。
输出格式
输出n分解质因数的形式,注意输出格式中没有空格。
样例输入
12
样例输出
12=2^2*3



1楼2010-06-08 14:25回复
    #include<iostream>
    using namespace std;
    int zhishu[100],c=1;int zhishua[100],n;
    void shuchu();
    void qiuzhi(int );
    void qzhishu ();
    int main ()
    {
         int a,b;zhishu[0]=2;
         cin>>n;
         qzhishu();
         qiuzhi(n);
         shuchu();
         for(int d=0;d<c;d++)
         cout<<zhishu[d]<<' ';
         system("pause");
         return 0;
    }    
    void qzhishu ()
    {
         int a,b;
         for(a=2;a<10000;a++)
         for(b=2;b<a;b++)
             {
             if(a%b==0) break;
             else{
                 zhishu[c]=a;
                 c++;
             }
         }        
    }    
    void qiuzhi (int n)
    {
         int a,b;
         for(int a=0;a<c;c++){
             if(n%zhishu[a]==0)
             n=n/zhishu[a];
             zhishua[a]++;
             qiuzhi(n);
         }    
    }    
    void shuchu()
    {
         int a,b;
         cout<<n<<'=';
         for(a=0;a<c;a++)
         if(zhishua[a]>0)
         {
             if(zhishua[a]==1)
             {
             cout<<zhishu[a];
             break;
             }
             else
             {
             cout<<zhishu[a]<<'^'<<zhishua[a];
             break;
             }
         }    
         for(b=a+1;b<c;c++)
         if(zhishua[b]>0)
         {
             if(zhishua[b]==1)
             cout<<'*'<<zhishu[b];
             else
             cout<<'*'<<zhishu[b]<<'^'<<zhishua[b];
         }   
    }    


    4楼2010-06-08 14:55
    回复