其实不过是大整数分解。。。

注意两点:注意L 不能==N

但是,N却可以是素数。。。囧

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdio>
#define LL __int64
#define MAX 1LL<<61
#define Times 8
#define N 501
#define C 101
using namespace std;
LL cop[N];
int ct; bool cmp(LL a,LL b){
if(a<b) return true;
return false;
} LL gcd(LL a,LL b){
return b==0?a:gcd(b,a%b);
} LL random(LL n){
return (LL)((double)rand()/RAND_MAX*n+0.5);
} LL multi(LL a,LL b,LL m){ //a*b%m
LL ret=0;
while(b){
if(b&1)
ret=(ret+a)%m;
b>>=1;
a=(a<<1)%m;
}
return ret;
} LL quick(LL a,LL b,LL m){
LL ans=1;
a%=m;
while(b){
if(b&1){
ans=multi(ans,a,m);
b--;
}
b/=2;
a=multi(a,a,m);
}
return ans;
} bool Witness(LL a,LL n){
LL m=n-1;
int j=0;
while(!(m&1)){
j++;
m>>=1;
}
LL x=quick(a,m,n);
if(x==1||x==n-1)
return false;
while(j--){
x=multi(x,x,n);
if(x==n-1)
return false;
}
return true;
} bool Miller_Rabin(LL n){
if(n<2) return false;
if(n==2) return true;
if(!(n&1)) return false;
for(int i=1;i<=Times;i++){
LL a=random(n-2)+1;
if(Witness(a,n)) return false;
}
return true;
} LL Pollard_Rho(LL n,int c){
LL x,y,d,i=1,k=2;
x=random(n-1)+1;
y=x;
while(true){
i++;
x=(multi(x,x,n)+c)%n;
d=gcd(y-x,n);
if(d>1&&d<n){
return d;
}
if(y==x) return n;
if(i==k){
y=x;
k=k<<1;
}
}
} void find(LL n,int k){
if(n==1) return ;
if(Miller_Rabin(n)){
cop[++ct]=n;
return ;
}
LL p=n;
while(p>=n)
p=Pollard_Rho(p,k--);
find(p,k);
find(n/p,k);
} int main(){
int T;
LL n;
scanf("%d",&T);
while(T--){
scanf("%I64d",&n);
ct=0;
find(n,C);
sort(cop+1,cop+1+ct,cmp);
if(ct==1){
printf("1 1\n");
continue;
}
LL cnt=0;LL tmp=0; LL ans=0;
cop[0]=1;
cop[++ct]=1;
for(int i=1;i<=ct;i++){
if(cop[i]!=cop[i-1]){
ans+=tmp;
tmp=cop[i];
cnt++;
}
else{
tmp*=cop[i];
}
}
if(ans==n)
ans/=cop[1];
printf("%I64d %I64d\n",cnt-1,ans);
}
return 0;
}

  

最新文章

  1. 基于SS5服务端的Socks5客户端
  2. RedHat Enterprise Linux 6.4 使用 Centos 6 的yum(转)
  3. rabbitmq使用心得
  4. [SharePoint 2010] Copy list item with version history and attachment
  5. Effective Java 读书笔记
  6. IntelliJ IDEA 打包可运行的 JAR
  7. Vmware 虚拟的Linux系统如何与宿主主机共享上网
  8. CSS3—3D翻转
  9. QT/C++ 智能指针
  10. 第9章 创建Web数据库
  11. samba server 设置
  12. 关于本地化(localization)
  13. Android中一个经典理解误区的剖析
  14. 弹出框sweetalert插件的简单使用
  15. Windows文件共享自动失效解决办法
  16. kbmmw ORM 对象定义语法简析
  17. 命令行运行python项目文件,报错:ModuleNotFoundError: No module named &#39;xxxx&#39; 解决办法
  18. CentOS下安装vsftpd
  19. ThinkPHP5 API 文档
  20. iview select下拉bug

热门文章

  1. ubuntu下创建第一个rails应用程序
  2. 0x59 单调队列优化DP
  3. 利用SQLite在android上实现增删改查
  4. WEEX学习网站
  5. HDU 3018 一笔画问题
  6. C - Game With Sticks
  7. Hadoop MapReduce编程 API入门系列之MapReduce多种输出格式分析(十九)
  8. Linq怎么支持Monad
  9. 用LyX写中文幻灯片
  10. 【Oracle】ORA-55610: Invalid DDL statement on history-tracked table