GCDLCM

题目链接

题目描述

In FZU ACM team, BroterJ and Silchen are good friends, and they often play some interesting games.

One day they play a game about GCD and LCM. firstly BrotherJ writes an integer A and Silchen writes an integer B on the paper. Then BrotherJ gives Silchen an integer X. Silchen will win if he can find two integers Y1 and Y2 that satisfy the following conditions:

• GCD(X, Y1) = A

• LCM(X, Y2) = B

• Fuction GCD(X, Y ) means greatest common divisor between X and Y .

• Fuction LCM(X, Y ) means lowest common multiple between X and Y .

BrotherJ loves Silchen so much that he wants Silchen to win the game. Now he wants to calculate how many number of X he can give to Silchen.

输入

Input is given from Standard Input in the following format:

输出

Print one integer denotes the number of X.

样例输入

3
12

样例输出

3

题解

大数质因数分解 Pollard_Rho

代码

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define scac(x) scanf("%c",&x)
#define sca(x) scanf("%d",&x)
#define sca2(x,y) scanf("%d%d",&x,&y)
#define sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define scl(x) scanf("%lld",&x)
#define scl2(x,y) scanf("%lld%lld",&x,&y)
#define scl3(x,y,z) scanf("%lld%lld%lld",&x,&y,&z)
#define pri(x) printf("%d\n",x)
#define pri2(x,y) printf("%d %d\n",x,y)
#define pri3(x,y,z) printf("%d %d %d\n",x,y,z)
#define prl(x) printf("%lld\n",x)
#define prl2(x,y) printf("%lld %lld\n",x,y)
#define prl3(x,y,z) printf("%lld %lld %lld\n",x,y,z)
#define mst(x,y) memset(x,y,sizeof(x))
#define ll long long
#define LL long long
#define pb push_back
#define mp make_pair
#define P pair<double,double>
#define PLL pair<ll,ll>
#define PI acos(1.0)
#define eps 1e-6
#define inf 1e17
#define mod 1e9+7
#define INF 0x3f3f3f3f
#define N 1005
const int maxn = 10005;
typedef unsigned long long ULL;
LL Fac[1000];
int Fn;
const int P_TEST[7]={2,3,5,7,11,13,17};
const int RhoLimit=10000;
const int RhoC=13;
LL GetPow(LL x,LL k,LL MOD);
LL gcd(LL x,LL y);
bool Miller_Rabin(LL x);
LL Pollard_Rho(LL n);
void Work(LL n);
LL Random(LL x);
LL QMMul(LL x,LL y,LL MOD);
LL GetPow(LL x,LL k,LL MOD)
{
LL ans=1;
for (;k>0;k>>=1,x=QMMul(x,x,MOD))
if (k&1) ans=QMMul(ans,x,MOD);
return ans;
}
bool Miller_Rabin(LL x)
{
if (x==2) return 1;
if (x<=1 || x&1==0) return 0;
for (int i=0;i<7 && P_TEST[i]<x;++i)
{
LL y=x-1;
while ((y&1)==0) y>>=1;
LL t=GetPow(P_TEST[i],y,x);
while (y!=x-1 && t!=1 && t!=x-1)
{
t=QMMul(t,t,x);
y<<=1;
}
if (!(t==x-1 || (y&1) && t==1)) return 0;
}
return 1;
}
LL Pollard_Rho(LL n)
{
LL x=Random(n-2)+2;
LL y=x;
int STEP=2;
for (int i=1;;++i)
{
x=QMMul(x,x,n)+RhoC;
if (x>=n) x-=n;
if (x==y) return -1;
LL d=gcd(abs(x-y),n);
if (d>1) return d;
if (i==STEP)
{
i=0;
y=x;
STEP<<=1;
}
}
}
void Work(LL n)
{
if (Miller_Rabin(n)) {Fac[Fn++]=n;return;}
LL p;
for (int i=0;i!=RhoLimit;++i)
{
p=Pollard_Rho(n);
if (p!=-1) break;
}
if (p==-1) return;
Work(p);
Work(n/p);
}
LL Random(LL x)
{
unsigned long long p=rand()*rand();
p*=rand()*rand();p+=rand();
return p%x;
}
LL gcd(LL x,LL y)
{
if (y==0) return x;
return gcd(y,x%y);
}
LL QMMul(LL x,LL y,LL MOD)
{
LL ans=0;
for (;y>0;y>>=1)
{
if (y&1)
{
ans+=x;
if (ans>=MOD) ans-=MOD;
}
x+=x;
if (x>=MOD) x-=MOD;
}
return ans;
} int main()
{
ll a,b;
scanf("%lld%lld",&a,&b);
if(b%a)
{
printf("0\n");
return 0;
}
ll xxx = b/a;
if(xxx == 1)
{
printf("1\n");
return 0;
}
Work(xxx);
sort(Fac+0,Fac+Fn);
ll cnt = 1;
ll temp = Fac[0];
ll res = 1;
for (int i=1;i<Fn;++i)
{
if(temp != Fac[i])
{
res*=(cnt+1);
cnt = 1;
temp = Fac[i];
//cout<<cnt<<endl;
}
else
{
cnt++;
}
}
res *= (cnt+1);
prl(res);
return 0;
}

upc组队赛16 GCDLCM 【Pollard_Rho大数质因数分解】的更多相关文章

  1. upc组队赛16 Winner Winner【位运算】

    Winner Winner 题目链接 题目描述 The FZU Code Carnival is a programming competetion hosted by the ACM-ICPC Tr ...

  2. upc组队赛16 Melody【签到水】

    Melody 题目描述 YellowStar is versatile. One day he writes a melody A = [A1, ..., AN ], and he has a sta ...

  3. upc组队赛16 WTMGB【模拟】

    WTMGB 题目链接 题目描述 YellowStar is very happy that the FZU Code Carnival is about to begin except that he ...

  4. Pollard_Rho大数分解模板题 pku-2191

    题意:给你一个数n,  定义m=2k-1,   {k|1<=k<=n},并且 k为素数;  当m为合数时,求分解为质因数,输出格式如下:47 * 178481 = 8388607 = ( ...

  5. poj 2429 Pollard_rho大数分解

    先对lcm/gcd进行分解,问题转变为从因子中选出一些数相乘,剩下的数也相乘,要求和最小. 这里能够直接搜索,注意一个问题,因为同样因子不能分配给两边(会改变gcd)所以能够将同样因子合并,这种话,搜 ...

  6. 模板题Pollard_Rho大数分解 A - Prime Test POJ - 1811

    题意:是素数就输出Prime,不是就输出最小因子. #include <cstdio> #include<time.h> #include <algorithm> ...

  7. pollard_rho 算法进行质因数分解

    //************************************************ //pollard_rho 算法进行质因数分解 //*********************** ...

  8. 质因数分解的rho以及miller-rabin

    一.前言 质因数分解,是一个在算法竞赛里老生常谈的经典问题.我们在解决许多问题的时候需要用到质因数分解来辅助运算,而且质因数分解牵扯到许许多多经典高效的算法,例如miller-rabin判断素数算法, ...

  9. 济南学习D3T1__线性筛和阶乘质因数分解

    [问题描述] 从1− N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字N. [输出格式] 一行,一个整数代表答案对100000007取模之后的 ...

随机推荐

  1. Assembly language 再读---续

    前面已经写到了第三章的数据类型 的那一部分 接下来是一些关于伪指令和其他杂七杂八的东西 1. 当前地址计数器:   $ 常用于  计算数组以及字符串的长度,如: .data list db ,,,,, ...

  2. 关于JSON.stringify()与JSON.parse()

    一.JSON.stringify()与JSON.parse()的区别 JSON.stringify()的作用是将js值转换成JSON字符串,而JSON.parse()是将JSON字符串转换成一个对象. ...

  3. 手动实现一个vue的mvvm,思路解析

    1.解析dom.fragment编译,初始化new watcher 2 ,数据劫持,Object.defineProperty(obj,key,{ configurable:true,// 可以配置 ...

  4. 使用WakeLock将Android应用程序保持后台唤醒

    前言: 一些手机app(如微信.QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息.但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使 ...

  5. 115-基于TI TMS320DM6467T Camera Link 机器视觉 智能图像分析平台

    基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台 1.板卡概述 该板卡是我公司推出的一款具有超高可靠性.效率最大化.无操作系统的智能视频处理卡,是机器视觉开发上的首选 ...

  6. liunx-网络基础

    liunx 网络配置  ifconfig: ipconfig -a ;显示信息 ifconfig eth1 up //开启网络接口 ifconfig eth1 down //关闭网络接口 ifconf ...

  7. python-zmail发送邮件

    import zmail #发送测试报告到邮件 with open(r'F:\asus\auto_file\unittest_html\2019-06-30 10-31-03report.html', ...

  8. [Luogu1938][USACO09NOV]找工就业Job Hunt

    原题链接:https://www.luogu.org/problem/show?pid=1938 这一道题有一个比较难的点就是,这一张图上,是点上有权.既然点上有权的话,我们就不好一下子使用最短路了. ...

  9. 数据库与缓存:3.mongodb的基本知识

    1. mongodb是什么? NoSQL 非关系型数据库,主要用于数据的海量存储.分为server数据存储端和client数据操作端. 1.1 关系型与非关系型数据库的区别? 1.sql:数据库--表 ...

  10. Kettle数据同步速度调优记录

    Msyql到Vertica 1.mysql中在openshop 数据库中选择其中一个300W左右数据的表 create table ip_records_tmp_01 AS SELECT * FROM ...