DUT oj 1016 一个数最多能分解成几个数的乘积 和素数打表法

来源:互联网 发布:apache 去掉index.php 编辑:程序博客网 时间:2024/06/04 23:19
顺便一提
dut 的oj地址 acm.dlut.edu.cn

给定一个数,它最多能分解成几个数的乘积(不包括1)?

Input

多测试数据,每个测试数据一个数N(1 < N <= 1000000)。

Output

输出对应的个数。

Sample Input

5 20

Sample Output

1 3
还记得省赛前纠结这个题目好久,最后还是疼告诉我的筛选法求素数 最后过的
每个数都可以分解为一堆素数的成绩 比如 2^a1 * 3^a2 ...
现在问你除了1 最多分解出多少个 我们肯定是要从第一个素数还是 除n 除到不能整除 换下一个素数 每除一次 ans++;
#include<stdio.h>int prime[1005];bool p[1005];int pn;void init(){int i,j;for(i=3;i<=1000;i++){if(i%2==0) p[i]=0;else p[i]=1;}for(i=3;i*i<=1000;i++){if(p[i]){for(j=i+i;j<=1000;j+=i)p[j]=0;}}pn=0;prime[0]=2;for(i=3;i<=1000;i++){if(p[i])prime[++pn]=i;}}int main(){init();int i,j;int n;int tot;while(~scanf("%d",&n)){tot=1;bool fin=0;for(i=0;i<=pn&&prime[i]*prime[i]<=n;i++){while(n%prime[i]==0){    if(prime[i]==n)    {        fin=1;        break;    }n/=prime[i];tot++;}if(fin)break;}printf("%d\n",tot);}return 0;}