前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【HDU - 4344】Mark the Rope(大整数分解)

【HDU - 4344】Mark the Rope(大整数分解)

作者头像
饶文津
发布2020-06-02 15:09:48
2970
发布2020-06-02 15:09:48
举报
文章被收录于专栏:饶文津的专栏饶文津的专栏

BUPT2017 wintertraining(15) #8E

题意

题解

代码

代码语言:javascript
复制
#include <cstdio>
#include <ctime>
#include <algorithm>
using namespace std;
typedef long long ll;
const int Times=10;
ll gcd(ll a, ll b){
	while(b){
		ll t=a%b;
		a=b;
		b=t;
	}
	return a;
}
ll qmul(ll a, ll b, ll m){
	ll ans=0;
	while(b){
		if(b&1){
			ans=ans+a;
			if(ans>=m)ans-=m;
		}
		a<<=1;
		if(a>=m)a-=m;
		b>>=1;
	}
	return ans;
}
ll qpow(ll a, ll b, ll m){
	ll ans=1;
	while(b){
		if(b&1)
			ans=qmul(ans,a,m);
		a=qmul(a,a,m);
		b>>=1;
	}
	return ans;
}
bool Miller_Rabin(ll n){
	if(n==2)return true;
	if(n<2||!(n&1))return false;
	ll m=n-1,x,y,a;
	int k=0;
	while(!(m&1)){
		++k;
		m>>=1;
	}
	for(int i=0;i<Times;++i){
		a=rand()%(n-1)+1;
		x=qpow(a,m,n);
		for(int j=0;j<k;++j){
			y=qmul(x,x,n);
			if(y==1&&x!=1&&x!=n-1)return false;
			x=y;
		}
		if(y!=1)return false;
	}
	return true;
}
ll pollard_rho(ll n, ll c){
	ll i=1, k=2, x, y;
	x=y=rand()%(n-1)+1;
	while(1){
		++i;
		x=(qmul(x, x, n)+c)%n;
		ll d=gcd((y-x+n)%n, n);
		if(d>1&&d!=n)return d;
		if(y==x)return n;
		if(i==k){
			y=x;
			k<<=1;
		}
	}
}
ll fac[200],cnt;
void find(ll n,int c){
	if(n==1)return;
	if(Miller_Rabin(n)){
		fac[++cnt]=n;
		return;
	}
	ll p=n;
	ll k=c;
	while(p>=n)p=pollard_rho(p,c--);
	find(p,k);
	find(n/p, k);
}
int main(){
	int t;ll n;
	scanf("%d", &t);
	while(t--){
		cnt=0;
		scanf("%lld", &n);
		find(n, 97);
		sort(fac, fac+cnt+1);
		int num=0;
		ll sum=0,tmp=0;
		for(int i=1;i<=cnt;++i){
			if(fac[i]!=fac[i-1]){
				++num;
				sum+=tmp;
				tmp=fac[i];
			}else tmp*=fac[i];
		}
		if(num==1)sum=n/fac[1];
		else sum+=tmp;
		printf("%d %lld\n",num, sum);
	}
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 题解
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档