描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
最后一个数后面也要有空格
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
示例1
输入:
180
输出:
2 2 3 3 5
#include <stdio.h>
int main(void){
int n;
int i;
while(scanf("%d", &n) == 1){
int tmp = n;
// 若 n 本身就是一个质数,那么只根据i*i<=n这个判断条件无法得出质数因子
// 若 tmp 比 i 小的话可以提前跳出循环
for(i=2; i*i<=n&&tmp>=i; i++)
{
while(tmp%i == 0)
{
printf("%d ", i);
tmp = tmp/i;
}
}
if(tmp>1)
{
printf("%d ", tmp);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int judge(long a)
{
long i;
if(a <= 3)
{
return 1;
}
else
{
for(i=2; i<a; i++)
{
if(a%i == 0)
{
return 0;
}
}
}
return 1;
}
int main(int argc, char** argv)
{
long num;
long i, j;
while(scanf("%ld", &num) != EOF)
{
while(judge(num) == 0)
{
for(i=2; i<num; i++)
{
if(num%i==0 && judge(i))
{
num = num / i;
printf("%ld ",i);
break;
}
}
}
if(num > 1)
printf("%ld", num);
printf("\n");
}
return 0;
}
时间复杂度不符合要求
#include <stdio.h>
int judge(long a)
{
if(a <= 3)
{
return 1;
}
for(int i=3; i<a; i++)
{
if(a%i == 0)
{
return 0;
}
}
return 1;
}
void get(long a)
{
long i;
if(judge(a) == 1)
{
printf("%d ", a);
return;
}
for(i=2; i<a; i++)
{
if(judge(i)==1 && a%i==0)
{
printf("%d ", i);
get(a/i);
break;
}
}
}
int main(void)
{
long in;
scanf("%ld", &in);
get(in);
printf("\n");
return 0;
}
420

被折叠的 条评论
为什么被折叠?



