您的位置:首页 > 其它

UVa 10392 - Factoring Large Numbers

2014-04-28 08:15 281 查看
传送门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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM UVa 10392