因子和阶乘

来源:互联网 发布:网络插座套什么清单 编辑:程序博客网 时间:2024/06/06 01:48
输入正整数n(2<=n<=100),把阶乘n!=1*2*3*...*n分解成素因子相乘的形式,从小到大输出各个素数(2、3、5...)的指数。例如,5! 表示为 3,1, 1个2, 3, 5。程序忽略比最大素因子更大的素数(否则末尾会有无穷多个0)。
样例输入:
5
53
样例输出:
5! = 3 1 1 

53! = 49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1 


运行的代码:

#include<iostream>
using namespace std;
#include<string.h>
#include<math.h>
int prime(int n)     //先写一个素数的调用函数
{
    int i;
    double m=n;
    if(n<=1)return 0;
    else if(n==2)return 1;
    else
    {
        for(i=2;i<=sqrt(m);i++)
        {
            if(n%i==0)return 0;
        }
        return 1;
    }
}
int main()
{
    int i,a[100][2],m,k,p,n,j=0;   //a[i][0]用来存素数,a[i][1]用来存素数的个数
    memset(a,0,sizeof(a));
    for(i=2;i<=100;i++)    //打表素数
      if(prime(i))
       a[j++][0]=i;
    while(cin>>n)
   {
       for(i=0;i<j;i++)a[i][1]=0;
   for(i=2;i<=n;i++)
   {
       if(prime(i))    //如果是素数的话数目直接加1就好
       {
           for(k=0;k<j;k++)
         {
            if(i==a[k][0])
            {
                a[k][1]++;
                break;
            }
         }
       }
       else   //否则的话,将这个数对素数(从小到大)一个一个的分解
       {
           m=i;
           p=0;
           while(m)
           {
               if(m==1)break;
               else if(m%a[p][0]==0){a[p][1]++;m/=a[p][0];}
               else p++;
           }

       }

   }
 
   cout<<n<<"!=";           //输出结果
   for(i=0;a[i][0]<=n;i++)
   cout<<a[i][1]<<' ';
   cout<<endl;
   }






    return 0;
}




0 0
原创粉丝点击