因子分解相关 整理

来源:互联网 发布:永恒之塔捏脸数据男 编辑:程序博客网 时间:2024/05/19 13:30
输入90,打印出90=2*3*3*5。
#include <stdio.h>#include <stdlib.h>#include <math.h>main(){int n,i,j,k;scanf("%d",&n);printf("%d=",n);i=0;while(n!=i){for(i=2;i<n;i++){if(n%i==0){printf("%d*",i);n=n/i;break;}}}printf("%d\n",n);system("pause");return 0;}
大于1的正整数 n 都可以分解为 n = x1 * x2 * ... * xm


例如:当n=12时,共有8种不同的分解式:12 = 1212 = 6*212 = 4*312 = 3*412 = 3*2*212 = 2*612 = 2*3*212 = 2*2*3对于给定正整数n,计算n共有多少种不同的分解式。
#include <iostream>#include <stdlib.h>using namespace std;int num=0;void solve(long n){if(1==n){num++;}else if(1<n){for(int i=n;i>=2;i--){double result=n*1.0/i;if(result==(long)result){solve(n/i);}}}}int main(){long n;cin>>n;solve(n);cout<<num<<endl;system("pause");return 0;}
#include "stdio.h"#include "math.h"#include "conio.h"int main(){        unsigned long i,j,k,h,m,n;        double weizhi;        while(scanf("%ld",&n)!=EOF)        {            printf("%ld =",n);            h=1;            m=n;            weizhi=sqrt(n);        for(j=1,i=2;i<=weizhi&&m!=1;j++,i=2*j-1)                {                                   k=0;                     while(!(m%i))                       {                                 k++;                                 m=m/i;                        }                     if(k==1)                        {                                  if(h==1){printf(" %ld",i); h++;}                                  else {printf(" * %ld",i); h++;}                        }                                           if(k>1)                        {                              if(h==1){printf(" %ld^%ld",i,k); h++;}                          else {printf(" * %ld^%ld",i,k); h++;}                        }                                        }            if(h==1) printf(" %ld",n);            else if(m>1)printf(" * %ld",m);            printf("\n");        }    return 0;   }


                                             
0 0