将其用质因子的乘积表示并输出2到100之间所有结果,格式为:2=2 3=3 4=2*2......100=2*2*5*5
将其用质因子的乘积表示并输出2到100之间所有结果,格式为:2=2
3=3
4=2*2
......
100=2*2*5*5
#include<stdio.h> #include<string.h> #define MAX 100 char IsPrime[MAX+1]={0}; int prim[MAX+1]={0}; int first_factor[MAX+1]={0}; //用来保存第一个数的因子,默认质数的值为0。是结合题意的,欧拉筛本来不需要~ int main() { int i=0; int j=0; int f=0; int num=0; int num_factor=0; memset(first_factor,0,sizeof(first_factor)); //初始化内存块清零 for (i=2;i<=MAX;++i) { if (!IsPrime[i]) prim[num++]=i; for (j=0,f=i*prim[j];j<num&&f<=MAX;++j,f=i*prim[j]) { IsPrime[f]=1; first_factor[f]=prim[j]; if (i%prim[j]==0) break; } printf("%d=",i); //上面是用欧拉筛求素数部分的代码,下面是结合题意整合输出 num_factor=i; while (first_factor[num_factor]) { printf("%d*",first_factor[num_factor]); num_factor/=first_factor[num_factor]; } printf("%d\n",num_factor); } puts(""); return 0; }
[此贴子已经被作者于2017-10-28 13:51编辑过]