因子和阶乘

来源:互联网 发布:淘宝延长收获规则 编辑:程序博客网 时间:2024/05/19 13:30

把阶乘n!=1*2*3*4......*n 分解

例如 825=3*5*5*11,应表示为(0,1,2,0,1);

#include <stdio.h>#include <string.h>//素数判定。注意:n不能太大int is_prime(int n) {  for(int i = 2; i*i <= n; i++)    if(n % i == 0) return 0;  return 1;}//素数表int prime[100], count = 0;int main() { //n和各个素数的指数  int n, p[100];  //构造素数表  for(int i = 2; i <= 100; i++)    if(is_prime(i)) prime[count++] = i;  while(scanf("%d", &n) == 1) {    printf("%d! =", n);    memset(p, 0, sizeof(p));    int maxp = 0;    for(int i = 1; i <= n; i++) {      //必须把i复制到变量m中,而不要在做除法时直接修改它      int m = i;      for(int j = 0; j < count; j++)        while(m % prime[j] == 0) { //反复除以prime[j],并累加p[j]          m /= prime[j];          p[j]++;          if(j > maxp)  maxp = j; //更新最大素因子下标        }    }    //只循环到最大下标    for(int i = 0; i <= maxp; i++)      printf(" %d", p[i]);    printf("\n");  }  return 0;}


自己写的代码有点错误

#include <iostream>#include <cstring>#include <cstdio>using namespace std;int is_prime(int n){    for (int i=2;i*i<=n;i++)    {        if (n%i==0)            return 0;    }    return 1;}int main(){    int p[100];    int n;    int prime[100],count=0;    for (int i=2;i<=100;i++)    {        if (is_prime(i))            prime[count++]=i;    }    while (scanf("%d",&n)==1)    {        int maxp=0;        cout<<n<<"! =";        memset(p,0,sizeof(p));        for (int j=0;j<=count;j++)        {            while (n%prime[j]==0)            {                p[j]++;                n/=prime[j];                if(j>maxp)                    maxp=j;            }        }        for (int i=0;i<=maxp;i++)        {            printf(" %d",p[i]);        }        printf("\n");    }    return 0;}


 

原创粉丝点击