感觉在洛谷 IDE 上很快啊……
但还是 TLE 了,嘤嘤嘤。
#include <bits/stdc++.h>
#define ll __int128
#define Auto vector<ll>::iterator
using namespace std;
const ll Maxn=610,inf=0x3f3f3f3f;
vector<ll>S;
inline ll qread(){
ll x=0;int f=1;char ch;
while((ch=getchar())<'0'||ch>'9') if(ch=='-') f=0;x=(ch^48);
while((ch=getchar())>='0'&&ch<='9') x=x*10+(ch^48);
return f?x:-x;
}
inline void print(ll x){
if(x>9) print(x/10);
putchar('0'+(x%10));
}
namespace Math{
ll mul(ll a,ll b,ll p){return (a*b-(ll)((__float128)a/p*b)*p+p)%p;}
inline ll ksm(ll a,ll b,ll p){
a%=p;
ll res=1;
for(;b;b>>=1,a=mul(a,a,p))if(b&1)res=mul(res,a,p);
return res;
}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
}
using namespace Math;
namespace Miller_Rabin{
ll Test[11]={0,2,61};
inline bool Prime(ll X){
if(X<2) return false;
ll t=X-1;ll k=0;
while(1^(t&1)) t>>=1,++k;
for(ll i=1;i<=2;i++){
if(X==Test[i]) return true;
ll A=ksm(Test[i],t,X),Next=A;
for(ll j=1;j<=k;j++){
Next=mul(A,A,X);
if(Next==1&&A!=1&&A!=X-1) return false;
A=Next;
}
if(Next!=1) return false;
}
return true;
}
}
using namespace Miller_Rabin;
namespace Pollard_Rho{
#define Rand(P) (rand()*rand()%(P)+1)
inline ll PR(ll X,ll Y){
ll t=0,k=1,v0=Rand(X-1),v1=v0,d,s=1;
while(true){
v1=(mul(v1,v1,X)+Y)%X;s=mul(s,abs(v1-v0),X);
if(!(v1^v0)||!s) return X;
if(++t==k){if((d=gcd(s,X))^1)return d;v0=v1;k<<=1;}
}
}
inline void solve(ll X){
if(!(1^X)) return ;
if(Prime(X)){S.push_back(X);return ;}
ll Y=X;while((Y=PR(X,Rand(X)))==X);while(!(X%Y)) X/=Y;
solve(X);solve(Y);
}
}
ll m,a,ans1=-inf,cnt;
int main(){
srand(time(0));
while(m=qread()){
S.clear();Pollard_Rho::solve(m);
sort(S.begin(),S.end());
S.resize(unique(S.begin(),S.end())-S.begin());
for(Auto it=S.begin();it!=S.end();it++){
ll t=*it;
print(t),printf("^");
int k=0;while(m%t==0) m/=t,++k;
printf("%d ",k);
}
puts(" ");
}
return 0;
}