POJ 2429 GCD & LCM Inverse(Miller_Rabin大素数测试+Pollar_rho素因子分解)

C#利用S7netplus实现西门子S7_200_SMART PLC高效点位监控与操作 本文详细介绍了如何使用C#结合S7netplus开源库高效监控与操作西门子S7-200 SMART PLC的点位。内容涵盖从开发环境搭建、建立通信连接,到核心的点位读写、批量数据处理及字节与位数组转换等关键技术,并提供了构建稳定监控程序的架构与避坑指南,帮助开发者快速实现上位机与PLC的稳定数据交互。 阅读详情

GCD & LCM Inverse

Given two positive integers a and b, we can easily calculate the greatest common divisor (GCD) and the least common multiple (LCM) of a and b. But what about the inverse? That is: given GCD and LCM, finding a and b. 

Input
The input contains multiple test cases, each of which contains two positive integers, the GCD and the LCM. You can assume that these two numbers are both less than 2^63.
Output
For each test case, output a and b in ascending order. If there are multiple solutions, output the pair with smallest a + b.
Sample Input

3 60

Sample Output

12 15
题意:

给定两个数的gcd和lcm求这两个数,并要求两个数是满足条件的且之和最小的答案

分析:

∵lcm(a,b)=a×bgcd(a,b)∵lcm(a,b)=a×bgcd(a,b)

∴lcm×gcd=a×b∴lcm×gcd=a×b

∴lcmgcd=agcd×bgcd∴lcmgcd=agcd×bgcd

∴agcd和bgcd∴agcd和bgcd是互质的

我们令n=lcmgcd,k=agcd,nk=bgcdn=lcmgcd,k=agcd,nk=bgcd

所以我们只需要对n进行素因子分解,然后组成两个互质的因子相乘得到n即可,因为要求和最小所以要尽量接近n−−√n

比如n分解成了n=pa11pa22pa33⋯parrn=p1a1p2a2p3a3⋯prar

这样我们只需要组合素质因子的幂这样组成的一个因子和剩下的一个因子必然互质,然后再保证接近n−−√n就行。

又因为n比较大,所以只能采用大素数测试即Miller_Rabin素性测试和Pollar_rho素因子分解

注意不知道为什么直接使用rand函数就行了,使用了srand函数就RE了

code:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;

const int S=20;

long long mult_mod(long long a,long long b,long long c)
{
    a%=c;
    b%=c;
    long long ret=0;
    while(b)
    {
        if(b&1){ret+=a;ret%=c;}
        a<<=1;
        if(a>=c)a%=c;
        b>>=1;
    }
    return ret;
}

long long pow_mod(long long x,long long n,long long mod)
{
    if(n==1)return x%mod;
    x%=mod;
    long long tmp=x;
    long long ret=1;
    while(n)
    {
        if(n&1) ret=mult_mod(ret,tmp,mod);
        tmp=mult_mod(tmp,tmp,mod);
        n>>=1;
    }
    return ret;
}

bool check(long long a,long long n,long long x,long long t)
{
    long long ret=pow_mod(a,x,n);
    long long last=ret;
    for(int i=1;i<=t;i++)
    {
        ret=mult_mod(ret,ret,n);
        if(ret==1&&last!=1&&last!=n-1) return true;
        last=ret;
    }
    if(ret!=1) return true;
    return false;
}

bool Miller_Rabin(long long n)
{
    if(n<2)return false;
    if(n==2)return true;
    if((n&1)==0) return false;
    long long x=n-1;
    long long t=0;
    while((x&1)==0){x>>=1;t++;}
    for(int i=0;i<S;i++)
    {
        long long a=rand()%(n-1)+1;
        if(check(a,n,x,t))
            return false;
    }
    return true;
}

long long factor[100];
int tol;

long long gcd(long long a,long long b)
{
    if(a==0)return 1;
    if(a<0) return gcd(-a,b);
    while(b)
    {
        long long t=a%b;
        a=b;
        b=t;
    }
    return a;
}

long long Pollard_rho(long long x,long long c)
{
    long long i=1,k=2;
    long long x0=rand()%x;
    long long y=x0;
    while(1)
    {
        i++;
        x0=(mult_mod(x0,x0,x)+c)%x;
        long long d=gcd(y-x0,x);
        if(d!=1&&d!=x) return d;
        if(y==x0) return x;
        if(i==k){y=x0;k+=k;}
    }
}

void findfac(long long n)
{
    if(Miller_Rabin(n))
    {
        factor[tol++]=n;
        return;
    }
    long long p=n;
    while(p>=n)p=Pollard_rho(p,rand()%(n-1)+1);
    findfac(p);
    findfac(n/p);
}
//以上全模板
long long r[100];
int num;
long long k;

void dfs(long long now,int x,long long n)
{
    if(now>sqrt(n)) return;//尽可能接近根号n
    k=max(k,now);
    for(int i=x;i<=num;i++) dfs(now*r[i],i+1,n);
}

int main()
{
    long long gcd,lcm,n;
    while(scanf("%lld%lld",&gcd,&lcm)!=EOF)
    {
        if(gcd==lcm)
        {
            printf("%lld %lld\n",gcd,lcm);
            continue;
        }
        tol=0;
        n=lcm/gcd;
        findfac(n); sort(factor,factor+tol);
        num=0; for(int i=0;i<=50;i++) r[i]=1;
        r[num]=factor[0];
        for(int i=1;i<tol;i++)
        {
            if(factor[i]==factor[i-1]) r[num]=r[num]*factor[i];//素因子的幂的形式
            else
            {
                num++;
                r[num]=factor[i];
            }
        }
        k=1; dfs(1,0,n);
        printf("%lld %lld\n",gcd*k,gcd*(n/k));
    }
    return 0;
}
电子科技大学计算机预推免(最终去向) 电子科技大学,预推免报名时必须要有一封本校老师写的推荐信,推荐信基本上就是复试的入场券,所以一定要提前联系老师,拿到推荐信。只要有机会进了面试,我觉得老师对于双非并不歧视,面试的个人表现才是关键性决定因素,技巧性也是很强的,如果有需要帮助的,欢迎私信~~ 阅读详情

相关推荐

Python量化交易实战:如何用vnpy+Tushare获取股票历史数据(附完整代码)

本文详细介绍了如何利用vn.py框架与Tushare数据接口,构建一个健壮的Python量化交易数据获取引擎。通过封装Tushare API,实现股票历史数据的自动化获取与格式转换,并适配vn.py的BarData结构,为策略回测与实盘交易提供稳定、高效的数据基础。文中提供了完整的代码实现,涵盖环境配置、核心封装逻辑及高级功能扩展。

cola5的博客 1219

【蓝桥杯】简单数论1——GCD&LCM

蓝桥杯必考点:简单数论

荷叶田田的博客 6227

APB Timer验证环境搭建——学习笔记(1)

以下为个人学习笔记,如有疏漏,请大家指正补充~~APB Timer是一个简单的下行计数器,包括一个32位计数器和一组比较器,可以实现多种计时功能。包括生成一次性中断或者定时中断。

qq_41651535的博客 1577

TOJ 2646

题目连接: http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2646 题目类型: 数论 - 素数测试 & 质因子分解 数据结构: 无 思路分析: 判断一个大整数 ( 2 ^ 54 ) 是否是整数 用平常的定义去判断是不行的 需要用 Miller_Rabin

`Laimic_ 723

SPSS实战:如何用Harman单因素检验搞定共同方法偏差(附完整操作步骤)

本文提供了一份详尽的SPSS实战指南,手把手教你运用Harman单因素检验来诊断共同方法偏差。文章从核心概念讲起,逐步详解数据准备、SPSS操作步骤、结果解读与报告撰写,帮助研究者快速掌握这一关键的数据质量控制方法,确保量化研究结论的可靠性。

weixin_29263201的博客 1693

物理机centos7系统重启后直接进入dracut

Warning: /dev/centos/root does not exist Warning: /dev/mapper/centos-root does not exist 在shell命令行执行以下: dracut:/# lvm vgscan dracut:/# lvm vgchange -ay dracut:/# exit 之后可以正常进入系统(测试正常)。 但是重启之后依然会进入dracut模式,永久解决如下: 查看kernel文件 [root@ecs ~]# ls -ltrh /boot

魏志标的博客 1万+

[数论]HOJ 2010 GCD & LCM Inverse

传送门:GCD & LCM Inverse GCD & LCM Inverse My Tags   (Edit)   Source : HUST Monthly Contest of April   Time limit : 2 sec   Memory limit : 32 M

jjaw2013 1163

Playwright自动化测试实战:攻克日历时间控件三大策略与Java实现

在Web自动化测试领域,元素定位与交互模拟是核心技术基础,其原理在于通过程序精确识别并操作页面中的DOM元素,以模拟真实用户行为。这项技术的核心价值在于提升测试效率、确保交互逻辑的覆盖度与可靠性,广泛应用于电商、金融、OA等系统的功能验证。日历时间控件作为典型的复杂交互组件,常涉及动态弹出层、多级导航与状态同步,是自动化测试中的常见难点。本文聚焦于使用Playwright工具,针对此类控件深入剖析了三种核心解决策略:从最高效的直接赋值、到全面模拟用户交互的主流方法,再到利用组件特性的混合定位方案,并结合Ja

weixin_28835551的博客 311

GCD & LCM Inverse //数论

题目链接 http://poj.org/problem?id=2429 题意 给两个数,分别是要求的两个数a,ba,ba,b的gcdgcdgcd和lcmlcmlcm,要求出一组满足的aaa和bbb,且a+ba+ba+b的值最小 思路 有一条性质是: a∗b=gcd(a,b)∗lcm(a,b)a*b=gcd(a,b)*lcm(a,b)a∗b=gcd(a,b)∗lcm(a,b), 做下变换: agcd...

wqq的博客 578

ChatGPT and Claude国内使用站点

这篇博客介绍了不同的AI聊天平台和定价信息,主要对比了ChatGPT和Claude两款产品。文章列出了多个提供聊天服务的AI平台,包括RawChat、ChatGPTPlus、ChatOpens、Wildcard和2233.ai等,并提供了每个平台的网页链接和定价详情。特别关注了Claude平台,介绍了其普通账号与会员账号的不同,以及相关的定价信息。此外,还提到了一些虚拟卡定价和服务细节,为用户选择合适的AI服务提供了多种参考。

nisidjndn的博客 1万+

MDIO接口协议与其详解——单片机

在单片机领域,通过MDIO接口可以与外部设备进行通信,实现对设备的控制和数据的读写。通过本文的介绍,你可以了解到MDIO接口协议的原理和使用方法,并参考源代码示例进行实际的开发和应用。具体的初始化方法与单片机的型号和开发环境有关,可以参考相应的单片机手册和开发工具的文档。(1)发送读取命令:向MDIO线发送读取命令,通常是发送一个特定的控制字节,用于指示要读取的寄存器地址。(1)发送写入命令:向MDIO线发送写入命令,通常是发送一个特定的控制字节,用于指示要写入的寄存器地址。二、MDIO接口协议使用方法。

web_class282的博客 2623

POJ 2429 GCD & LCM Inverse 因式分解

点击打开链接 GCD & LCM Inverse Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8706   Accepted: 1649 Description Given two positive integers a and b, we c

代码改变世界,keep coding。 2213

ORB-SLAM3编程实践指南

它基于特征点的立体视觉和视觉惯性里程计技术,能够在没有先验知识的情况下,从单目、双目或RGB-D摄像头的输入中实时构建稠密三维地图,并实现相机的定位。通过正确配置环境、准备数据集和运行ORB-SLAM3,您可以实现高效的视觉SLAM系统,并获取相机在三维空间中的位姿。其中,[path_to_vocabulary]是ORB-SLAM3的词汇文件路径,[path_to_settings]是相机参数配置文件路径,[path_to_sequence]是输入图像的路径。运行ORB-SLAM3。

ByteNinja的博客 551

POJ2429 GCD&LCM Inverse(整数分解,由GCD+LCM求a,b)

POJ2429 GCD&LCM Inverse(整数分解,由GCD+LCM求a,b) 分类: 数论2013-02-12 22:00 180人阅读 评论(1) 收藏 举报 题目:GCD & LCM Inverse   题意:给你两个数G和L分别是a,b的最大公约数和最小公倍数,求a,b。(有多组a,b的情况下取a+b最小的)   分析:由于 G和L分别

pi9nc的专栏 1774

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

POJ - 2429 GCD & LCM Inverse

题意: 给定两个范围是2^63的两个数,分别代表gcd(a,b)和lcm(a,b)(最大公约数和最小公倍数),让求和最小的a,b. 分析: 通过最大公约数求最小公倍数的方法为:lcm(a,b)=a*b/gcd(a,b). 那么通过题目中给出的条件,我们可以知道要求的a和b满足a*b=lcm(a,b)*gcd(a,b). 现在把问题简化成找到任意一组a b使得题目要求的条件成立: a=...

BigZong 315

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

GCD & LCM Inverse(poj 2429)

题意:给出xxx和yyy的gcdgcdgcd和lcmlcmlcm,让你求出x+yx+yx+y最小的x,yx,yx,y 思路:首先(xy)gcd=lcm\frac{(xy)}{gcd}=lcmgcd(xy)​=lcm,可以构造xgcd×ygcd=lcmgcd\frac{x}{gcd}\times\frac{y}{gcd}=\frac{lcm}{gcd}gcdx​×gcdy​=gcdlcm​,其中xg...

weixin_43956585的博客 311

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

GCD和LCM算法

a 能整除b,记为 a|b。其中,a 和 b为整数,且a不等于0, b是a 的倍数,a 是b的约数(因子)。如:13|182,一5|35,-3|36;6 的因子是士1、2、土3、土6。性质1)若a,b,c为整数,且alb、blc,则alc;2)若a、b、m,n为整数,且cla、clb,则cl(ma+nb);3)定理:带余除法。如果a和b为整数且b>0,则存在唯一的整数 q、r,使a=bq+r,0

lclchong的博客 2936

最大公约数和最小公倍数数(GCD&LCM)

1.GCD的定义 GCD 即最大公约数Greatest Common Divisor。整数 a 和 b 的最大公约数是指能同时整除 a 和 b 的最大整数,记为 gcd(a,b)。 2.GCD的性质 1) gcd(a,b)=gcd(a,a+b)=gcd(a,k⋅a+b) 2) gcd(ka,kb)=k⋅gcd(a,b)。 3) 多个整数的最大公约数:gcd(a,b,c)=gcd(gcd(a,b),c)。 4) 若 gcd(a,b)=d,则 gcd(a/d,b/d)=1,即 a/d=与 b/

weixin_61907955的博客 2599

POJ 2429 数论

GCD &amp;amp; LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5559 Accepted: 993 Description Given two positive integers a and b, we can easily calculate the...

lilisalo 225

GCD&LCM

x | y 是指y%x==0 Gcd(a,b)表示a,b的最大公约数 Lcm(a,b)表示a,b的最小公倍数 ab=Gcd(a,b)*Lcm(a,b) 求最大公约数:法一:Gcd(a,b)=Gcd(b,a%b)        法二:           如果a==b,Gcd(a,b)=a;           如果a,b都是偶数,Gcd(a,b)=Gcd(a/2,b/2)...

dl429807872的博客 251

【GCD&LCM】

GCD:最大公约数 LCM:最小公倍数 gcd(x,y)即求x与y的最大公约数;lcm(x,y)即求x与y的最小公倍数 且有式子:a*b = gcd(a,b) * lcm(a,b);因此我们可以先求gcd然后由公式求出lcm.(最好写成lcm = a / gcd * b)#include<cstdio> int gcd(int a,int b) { return !b?a:gcd(b,

烟火 910

AOJ0005 GCD and LCM【数论 GCD&LCM】

题目链接:GCD and LCM(原题)         GCD and LCM(VJ)   Time Limit : 1 sec, Memory Limit : 131072 KB Problem Description Write a program which computes the greatest common divisor (GCD) and the least commo...

fyy_lufan的博客 317

POJ 2429 GCD & LCM Inverse (大数分解)

GCD & LCM Inverse 题目:http://poj.org/problem?id=2429 题意: 给你两个数的gcd和lcm,[1, 2^63)。求a,b。使得a+b最小。 思路: lcm = a * b / gcd 将lcm/gcd之后进行大数分解,形成a^x1 * b^x2 * c^x3…… 的形式,其中a,b,c为互不相同的质数。然后暴力枚举即可。

SIOFive的专栏 1115

29-divide-two-integers

题目描述: Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator. Return the quotient after dividing dividend by divisor. The integer divis...

wj903829182的专栏 663

GCD and LCM(数学 + GCD)

  GCD and LCM Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld &amp;amp; %llu Description Write a program which computes the greatest common divisor (GCD) and the least com...

Simone chou... 984

poj 2429 GCD & LCM Inverse

Given two positive integers a and b, we can easily calculate the greatest common divisor (GCD) and the least common multiple (LCM) of a and b. But what about the inverse? That is: given GCD and LCM, f...

weixin_30577801的博客 123
上一篇: POJ 3904 Sky Code(容斥原理)
下一篇: Pseudoprime numbers(快速幂模+素性测试)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值