文章
13
粉丝
499
获赞
21
访问
135.5k
看很多人都是把质数单拎出来,这样其实并不对,因为也会存在很大的质数。所以其中的精髓应该是了解:例如:2和3是一个较小的质数,所以如果每次都从2开始的话,这样子永远求得的都是质数而不会有非质数,因为如果想把4或者6作为因数的话,首先会被先试验的2所分解掉。所以不会出现非质数的情况。
#include<stdio.h>
int main()
{
int N;
int step = 0;
int i = 2;
while(scanf("%d",&N)!=EOF)
{
step = 0;
if(N==1)
{
printf("1\n");
return 0;
}
while(N!=1)
{
if(N%i==0)
{
step++;
N = N/i;
i = 2;
}
else
i++;
}
printf("%d\n",step);
}
return 0;
}
登录后发布评论
楼主的方法还是很容易让人理解的,值得点赞
判断到根号下就可以了,加个if就不是暴力了,在这个代码的基础上加一个判断就可以了:http://www.noobdream.com/DreamJudge/Issue/code/84288/
你这个方法会超时的,我在牛客网上运行了一下,运行超时。例如17,只有一个分解17,但是要从2开始不断加到17,去依次判断,题目中给的
N最大为10^9,肯定会存在一个无限大的素数,这时i要从2一直加到这个数,这样肯定会超时。超时原因是我觉得是这个,可能想的也不对哈
给你点32个赞