传送门UVa 10392 - Factoring Large Numbers
因式分解的题目.
实在想不到什么好方法, 只好用简单粗暴的方法过.
注意题目中的这句话
You may assume that there will be at most one factor more than 1000000.
也就是说除了数本身以外所有的因子都小于1000000.
这样循环就有一个限度了.
详情见代码
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int main()
{
//freopen("input.txt", "r", stdin);
register long long i, n, k;
while (scanf("%lld", &n))
{
if (n < 0)
break;
//我把输入的数分两种情况处理, 仅仅是为了提高一点点的时间效率. 去掉任何一种都对.
if ((int)sqrt(n) < 1000000)
{
for (i = 2; i <= (int)sqrt(n); i++)
{
while (n % i == 0)
{
printf(" %lld\n", i);
n /= i;
}
if (n == 1)
break;
}
if (n > 1)
printf(" %lld\n", n);
}
else
{
for (i = 2; i <= 1000000; i++)
{
while (n % i == 0)
{
printf(" %lld\n", i);
n /= i;
}
if (n == 1)
break;
}
}
if (i > 1000000)
printf(" %lld\n", n);
printf("\n");
}
return 0;
}