题解 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;
}
最后。。。

浙公网安备 33010602011771号