Lucky Chains

题目链接

Educational Codeforces Round 139 (Rated for Div. 2)

D. Lucky Chains

取模的性质,更相减损术


思路:

我们假设链的长度为 w w w,不妨设 x ≥ y x\ge y xy,那么 g c d ( x + k , y + k ) = 1 ( 0 ≤ k ≤ w ) gcd(x+k,y+k)=1\quad (0\le k\le w) gcd(x+k,y+k)=1(0kw)。根据更相减损术,可以把式子写成如下形式: g c d ( x + k , y + k ) = g c d ( y + k , x − y ) = 1 gcd(x+k,y+k)=gcd(y+k,x-y)=1 gcd(x+k,y+k)=gcd(y+k,xy)=1我们只要找到第一个不满足这个式子的 k k k 的取值,我们就知道了链的长度 w w w

如果 g c d ( y + k , x − y ) ≠ 1 gcd(y+k,x-y)\not=1 gcd(y+k,xy)=1,那么假设它们的最大公因数为 p p p,即 g c d ( y + k , x − y ) = p gcd(y+k,x-y)=p gcd(y+k,xy)=p 的话, y + k , x − y y+k,x-y y+k,xy 都应该是 p p p 的倍数, p p p 是它们的约数。因为 x − y x-y xy 是个定值,所以我们可以枚举 x − y x-y xy 的所有约数来得到 p p p

不过枚举约数太慢了, n ∗ 1 0 7 ≈ 3 ∗ 1 0 9 n*\sqrt{10^7}\approx3*10^9 n107 3109,取模运算还很慢,八成会超时。考虑到我们上面其实并不需要知道 y + k , x − y y+k,x-y y+k,xy 的最大公因数,我们只要他俩随便能有个相同的因数就行了,因此我们可以把这个最大公因数 p p p 拆成若干质因数,我们只对质因数进行验证就好了。

将某个数分解质因数可以用欧拉筛来预处理,每次标记合数的时候就记录一下这个合数由哪个质数算过来即可。之后查询会非常迅速(有几个质因数就只查几遍)。

y + k y+k y+k p p p 的倍数就需要 k = ( y − y % p ) % p k=(y-y\%p)\%p k=(yy%p)%p y y y 加上一个值得到最近的 p p p 的倍数)。 k k k 值就是所有约数中满足条件的最小的那个了。 0 ∼ k − 1 0\sim k-1 0k1 都满足条件,链长就是 k k k 了。

code:

#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=1e7+5;
const int inf=1e9;int T,a,b,x;bool vis[maxn];
int prime[maxn],lst[maxn],cnt;
void Eular(int n){vis[1]=true;lst[1]=1;for(int i=2;i<=n;i++){if(!vis[i]){prime[++cnt]=i;lst[i]=i;}for(int j=1,p=prime[1];j<=cnt && i*p<=n;p=prime[++j]){vis[i*p]=true;lst[i*p]=p;if(i%p==0)break;}}
}int main(){cin.tie(0)->sync_with_stdio(false);Eular(1e7);cin>>T;while(T--){cin>>a>>b;if(a>b)swap(a,b);x=b-a;int ans=inf;for(int p=lst[x];p!=1;p=lst[x/=p])ans=min(ans,(p-b%p)%p);if(ans!=inf)cout<<ans<<endl;else cout<<-1<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生成式AI的情感实验——AI能否产生思想和情感?

机器人能感受到爱吗&#xff1f;这是一个很好的问题&#xff0c;也是困扰了科学家们很多年的科学未解之谜。虽然我们尚未准备好向智能机器赋予情感&#xff0c;但智能机器却已经可以借助生成式人工智能&#xff08;AI&#xff09;来帮助我们表达自己的情感。 自然情感表达 AI正…

阻抗控制中的effort and flow

阻抗控制&#xff0c;由Hogan在&#xff08;Hogan&#xff0c;1985&#xff09;中首次描述&#xff0c;已被广泛应用于机器人系统的控制中&#xff0c;以调节交互或接触任务的遵从性。阻抗表示运动与相互作用力或扭矩之间的动态关系。 阻抗控制是一种基于力的控制方法&#xf…

leetcode3100--换水问题II

1. 题意 经典空瓶换汽水问题 2. 题解 直接模拟即可 class Solution { public:int maxBottlesDrunk(int numBottles, int numExchange) {int ans 0;while (numBottles > numExchange) {ans numExchange;numBottles - numExchange - 1;numExchange;}return ans numBott…

risc-v向量扩展strlen方法学习

riscv向量文档中给出了strlen的实现&#xff0c; 大概是这么一个思路&#xff0c; 加载向量: 使用向量加载指令&#xff08;如 vload&#xff09;从内存中加载一个向量长度的字符。比较向量与零: 使用向量比较指令&#xff08;如 vmask 或 vcmpeq&#xff09;来检查向量中的每…

加快形成新质生产力的重要着力点

新一轮科技革命和产业变革、大国竞争加剧以及我国经济发展方式转型等重大挑战在当下形成历史性交汇&#xff0c;这也为我国创造了重要的战略机遇。想要牢牢抓住发展的“机会窗口”&#xff0c;必须以科技创新推动产业创新&#xff0c;以产业升级构筑竞争新优势&#xff0c;加快…

Linux网络协议栈从应用层到内核层④

文章目录 1、网卡接受数据2、网络设备层接收数据3、ip层接受数据4、tcp层接受数据5、上层应用读取数据6、数据从网卡到应用层的整体流程 1、网卡接受数据 当网卡收到数据时&#xff0c;会触发一个中断&#xff0c;然后就会调用对应的中断处理函数&#xff0c;再做进一步处理。…

Least Prefix Sum

题目链接 Hello 2023 C. Least Prefix Sum 思路&#xff1a; 仔细看式子&#xff0c;发现可以对它进行推理&#xff08; m m m 是定值&#xff0c; 1 ≤ k ≤ n 1\le k\le n 1≤k≤n &#xff09;&#xff1a; 当 k ≤ m k\le m k≤m 时&#xff0c;有 a 1 a 2 ⋯ a …

pycharm

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;零基础学Python &#x1f4ac;个人格言&#xff1a;不断的翻越一…

ubuntu22.04 静态IP设置脚本

#!/bin/bash# 设置静态IP地址的脚本# 网卡名称 interface"ens33"# 静态IP地址 ip_address"192.168.225.2"# 子网掩码长度 subnet_mask_len"24"# 默认网关 default_gateway"192.168.225.1"# DNS服务器 dns_servers"[114.114.114.1…

企业计算机服务器中了mallox勒索病毒怎么办?Mallox勒索病毒解密流程步骤

网络技术的不断应用与发展&#xff0c;为企业的生产运营带来了极大便利&#xff0c;企业通过网络办公开展各项工作业务已经成为常态&#xff0c;网络为企业的发展带来了更多机遇&#xff0c;但随之而来的网络数据安全威胁也在不断增加。近期&#xff0c;云天数据恢复中心接到山…

19k star, 导出微信聊天记录,生成 HTML、Word、CSV等格式,并分析聊天数据,做成可视化年报

19k star, 导出微信聊天记录&#xff0c;生成 HTML、Word、CSV等格式&#xff0c;并分析聊天数据&#xff0c;做成可视化年报 分类 开源分享 项目名: 留痕 -- 一款强大的微信聊天管理工具 Github 开源地址&#xff1a;https://github.com/LC044/WeChatMsg Gitee 开源地址&…

分布式架构中一些常用算法的理解

对分布式算法 - 一致性Hash算法的理解 一致性哈希算法是一种分布式算法&#xff0c;用于解决数据分布和负载均衡问题。它通过将数据和节点映射到一个哈希环上&#xff0c;实现了数据在节点之间的均匀分布和最小化数据迁移。 一致性哈希算法的核心思想是将数据和节点都映射到哈…

python随笔学习

python里面的高阶函数: 在Python中&#xff0c;高阶函数是指能够接收其他函数作为参数&#xff0c;或者将函数作为返回值的函数。这种特性使得函数更加灵活&#xff0c;可以用来构建更复杂的功能。 Python中常见的高阶函数: map(function, iterable)&#xff1a;将一个函数应…

百度行驶证C++离线SDK V1.1 C#接入

百度行驶证C离线SDK V1.1 C#接入 目录 说明 效果 项目 代码 下载 说明 自己根据SDK封装了动态库&#xff0c;然后C#调用。 SDK包结构 效果 项目 代码 using Newtonsoft.Json; using System; using System.Drawing; using System.Runtime.InteropServices; using System…

LeetCode-94. 二叉树的中序遍历【栈 树 深度优先搜索 二叉树】

LeetCode-94. 二叉树的中序遍历【栈 树 深度优先搜索 二叉树】 题目描述&#xff1a;解题思路一&#xff1a;递归解题思路二&#xff1a;迭代解题思路三&#xff1a;0 题目描述&#xff1a; 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1…

基于Python深度学习的中文情感分析系统(V2.0)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

信息安全就是国家安全,带大家了解一下安全算法

信息安全就是国家安全&#xff01; 今天这编文章就带大家了解一下安全算法吧&#xff0c;个人理解仅供参考&#xff01; 对安全算法 - 摘要算法的理解 摘要算法是一种将任意长度的数据转换为固定长度字节串的算法。它具有以下特点和应用。 首先&#xff0c;摘要算法能够生成…

详解Qt网络编程

Qt的网络编程能力非常强大&#xff0c;它提供了从底层socket API到高层HTTP、FTP等协议处理的完整解决方案。下面将简要介绍Qt中网络编程的核心类及其功能&#xff0c;并给出一些基本的使用示例。 核心网络类&#xff1a; QTcpSocket 和 QTcpServer QTcpSocket 是用于TCP通信的…

文件操作详解(三)--fsee -- ftell -- rewind -- feof函数 -- ferror函数

目录 一.文件的随机读写1.fseek2.ftell3.rewind 二.文件读写结束的判定1.feof函数&#xff08;不是用来判定文件结束的&#xff09;2.ferror函数 三.文件缓冲区 一.文件的随机读写 1.fseek int fseek(FILE* stream,long int offset,int origin); //第一个参数文件流 //第二个…

react组件:fragment

如果你要传递 key 给一个 &#xff0c;你不能使用 <>…</>&#xff0c;你必须从 ‘react’ 中导入 Fragment 且表示为…。 当你要从 <></> 转换为 [] 或 <></> 转换为 &#xff0c;React 并不会重置 state。这个规则只在一层深度的情况下…