00000

#include<bits/stdc++.h>
typedef long long ll;
typedef __int128_t lll;
ll mulp(ll a,ll b,ll p){
	return a*(lll)b%p;
}
ll sqrp(ll a,ll k,ll p){
	return (a*(lll)a+k)%p;
}
ll gcd(ll a,ll b){return a?gcd(b%a,a):b;}
ll pollard(ll a,ll u,ll k){
	ll z=k,zz=sqrp(k,u,a);
	for(int i=0;i<1000000;++i){
		z=sqrp(z,u,a);
		zz=sqrp(zz,u,a);
		zz=sqrp(zz,u,a);
		ll t=gcd(zz-z+a,a);
		if(t!=1 && t!=a)return t;
	}return 0;
}
ll fac(ll a){
	for(int i=1;i<=11;++i)
		if(ll t=pollard(a,i,i))
			return t;
	return a;
}
int main(){
	ll a;
	while(~scanf("%lld",&a))
		printf("%lld\n",fac(a));
	return 0;
}
posted @ 2017-04-22 10:08  zball  阅读(487)  评论(0编辑  收藏  举报