您的位置:首页 > 其它

分解正整数成质因数

2014-11-02 00:30 309 查看
题目 - 分解正整数成质因数
来源医学部2009期末考试
描述
将一个正整数n(2<=n<=1000000)分解成质数的乘积。如90=2*3*3*5

关于输入
输入是一个正整数n,表示有n行数据。 其后每行一个正整数,为待分解因式的数。

关于输出
输出有n行。

每行为相应正整数的因式分解的形式(例如:90=2*3*3*5)。

例子输入
2

90

20

例子输出
90=2*3*3*5

20=2*2*5

提示
此题数据较大,因此很多同学可能超时……

注意一下,如果说,先用判断每个数是不是质数的方法,求出1~100000之内的所有质数,是很有可能超时的。

那么大家考虑一下,分解质因数是不是需要求出所有的质数呢?

我觉得不需要

最快的方法大概需要进行根号n(n为输入的数)次运算,方法如下

将i从2开始,依次累加,看看i是不是n的因数

如果是,则n除以i,记录i(注意如果n有多个因数i怎么办?)

如果不是,则把i加1

(当i*i>n的时候,可以停止了)为什么i*i>n的时候就能停止?此时需要怎么处理(这个留给大家思考
#include <stdio.h>

int process(int x, int r)
{
while(x%r == 0)
{
x = x/r;
printf("%d%c", r, "*\n"[x == 1]);
}
return x;
}

int main()
{
int n = 2;
scanf("%d", &n);
while(n--)
{
int x = 8000;
int r = 2;

scanf("%d", &x);
printf("%d=", x);

x = process(x, r);
for(r = 3; x != 1; r = r + 2)
{
x = process(x, r);
}
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: