C语言程序设计基础案例8.1

来源:互联网 发布:淘宝小二是什么意思 编辑:程序博客网 时间:2024/06/05 09:53
#define MAX_N 60000#define MAX_ITEM 7500#include <stdio.h>#include <math.h>int primes[MAX_ITEM]={0},numbers[MAX_N]={0};int gen_primes (int n,int *primes);/*生成质数表*/void gen_factors (int n,int m,int *primes,int *num);/*分解质因数,填入出现次数表*/void print (int m,int *primes,int *num);/*输出结果*/int main(){    int m,n;    printf("please Enter N: ");    scanf("%d",&n);    if (n<2||n>MAX_N)    {        printf("N must be between 2 and %d\n",MAX_N);    }    else    {        m=gen_primes (n,primes);        gen_factors (n,m,primes,numbers);        print(m,primes,numbers);    }    return 0;}int gen_primes (int n,int *primes)/*生成质数表*/{    int x=0,k;int i,j;for (i=2;i<=n;i++)/*从2到n判断是否为质数*/{    k=(int)sqrt(i);/*求质数的通常算法*/    for (j=2;j<=k;j++){    if (i%j==0)    break;}if (j>k){    primes[x]=i;    x++;}}return x;/*返回质数个数*/}void gen_factors (int n,int m,int *primes,int *num)/*分解质因数,填入出现次数表*/{int a=1,i;for (i=1;i<=n;i++)/*求n!*/a=a*i;i=0;while (a>1){if (a%primes[i]==0){    a=a/primes[i];/*判断a的因子*/    num[i]++;}elsei++;}}void print (int m,int *primes,int *num)/*输出结果*/{    int i,j;    for (i=0;i<m;i++)    {        if (num[i]>1)        {            if (i!=1)            printf("%d^%d*",primes[i],num[i]);            else            printf("%d^%d",primes[i],num[i]);        }            else            {                if (i!=1)                printf("*%d",primes[i]);                else                    printf("%d",primes[i]);            }    }}

0 0