题解 SP4942 【FACT0 - Integer Factorization (15 digits)】

实际发表时间:2020-04-08
原题链接

我蒻蒻地指出楼上大佬的错误...

不是从2~\(\sqrt{n}\) 枚举么

枚举1会死循环。。。

做法:

枚举2~\(\sqrt{n}\)的每一个数\(i\),如果\(n\%i=0\)则一直\(n/=i\)直到除不动为止,每次除\(ct++\),除完输出\(i\)^\(ct\)即可
你可能会想,这怎么能保证\(i\)是质数呢
\(Answer:\)因为其他非质因数一定是小于它的一个质因数的倍数,当我们除完了小于它的质因数,就没法除它了
这个点其他题解都没有提及
代码:

#include<bits/stdc++.h>
using namespace std;

long long n;
int sn,ct;

int main()
{
    while(~scanf("%lld",&n)&&n)
    {
        sn=sqrt(n);
        for(int i=2;i<=sn;i++)//枚举
        {
            if(n%i==0)//操作
            {
                ct=0;
                while(n%i==0)
                {
                    n/=i;
                    ct++;
                }
                printf("%d^%d ",i,ct);//输出
            }
        }
        if(n>1)printf("%lld^1",n);
        puts("");
    }
    return 0;
}

最后。。。

记得开\(long\;long!\)

posted @ 2020-08-28 10:19  ADay526  阅读(85)  评论(0)    收藏  举报