D. Lucky Chains edu139 div2

news/2025/1/11 20:06:27/

Problem - D - Codeforces

题意是给你a和b,要求__gcd(a+k,b+k)==1的k最多可以增加多少个1

分析:

遇到这种的最大公约数的问题,有很大概率都是推公式,以及使用筛法去把所有的质数筛出来利用质因子去缩短时间

这题就是一个推公式的题目了

gcd有以下性质:

if(a<b) \quad gcd(a,b)==gcd(a,b-a);

if(a>b) \quad\ gcd(a,b)==gcd(a-b,b);

gcd(a,b)==gcd(b,a%b);

然后对于每一个k,gcd(a+k,b+k)==gcd(a+k,b-a);

所以对于每一个k就是求gcd(a+k,b-a),要求每一个k的增加之后保证gcd(a+k,b-a)==1,即b-a的每个质因子p,保证(a+k)%p==0,求这个k的最小值。因为超过这个最小值,两者的公约数就不是1了,所以求每个质因子共同的k的最小值,就是保证了a+k不是任何一个p的倍数

(a+k)%p求k的最小值等价于k等于p-a%p(这里可以自己手推,取模的性质,随便想想就可以了)

所以首先用筛法把质数都筛出来,然后对于b-a进行质因数分解,随后求每一个质因子p保证k的最小值(现在开始就不要使用埃氏筛了,太慢。。使用欧拉筛比较好)

然后把longlong注释掉,否则超时(用longlong和endl是十分慢的)

下面是代码(从每日一棵splay那里学的QAQ)

//#pragma GCC optimize(1)
//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
#define IOS ios::sync_with_stdio(false), cin.tie(0);
#include<iostream>
#include<map>
#include<set> 
#include<cstdio>
#include<cstring>
#include<vector>
#include<stack>
#include<algorithm>
#include<cmath>
#include<queue>
#include<deque>
using namespace std;
//#define int long long
typedef long long ll;
typedef pair<int,int> PAII;
const int N=2e6+10,M=5050,INF=1e18,mod=998244353,NN=10000010;
map<int,int> mp;
bool st[N];
int prime[N];
int cnt;
void init()
{for(int i=2;i<N;i++){if(!st[i]) prime[cnt++]=i;for(int j=0;prime[j]<=N/i;j++){st[prime[j]*i]=true;if(i%prime[j]==0) break;}}
}
signed main(){IOS;int T;//T=1;cin>>T;init();while(T--){int a,b;cin>>a>>b;if(a>b) swap(a,b);int t=b-a;if(__gcd(a,b)!=1){cout<<"0\n";continue;}int minn=INF;int now=0;while(prime[now]<=sqrt(t)){if(t%prime[now]!=0){now++;continue;}while(t%prime[now]==0) t/=prime[now];minn=min(minn,prime[now]-a%prime[now]);now++;}if(t>1) minn=min(minn,t-a%t);if(minn==INF) cout<<"-1\n";else cout<<minn<<"\n"; }return 0;
} 
/**/ 


http://www.ppmy.cn/news/6915.html

相关文章

【Leetcode】101. 对称二叉树、104. 二叉树的最大深度、226. 翻转二叉树

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 101. 对称二叉树 104. 二叉树的最大深度 226. 翻转二叉树 101. 对称二…

学到羊之Kafka

1 kafka 是啥 Kafka 是一款开源的消息引擎系统&#xff0c;用来实现解耦的异步式数据传递。即系统 A 发消息给到 消息引擎系统&#xff0c;系统 B 通过消息引擎系统读取 A 发送的消息&#xff0c;在大数据场景下&#xff0c;能达到削峰填谷的效果。 2 Kafka 术语 Kafka 中的分…

国内葡萄酒行业数据浅析

大家好&#xff0c;这里是小安说网控。 葡萄酒是最为常见的果酒&#xff0c;在国内酒品市场上占据着一席之地。近年来&#xff0c;受整体经济环境影响&#xff0c;葡萄酒行业的各项数据都不甚理想。 今年&#xff0c;1-10月份&#xff0c;国内葡萄酒产值&#xff0c;无论是当期…

Ffuf爆破神器(超详细)

目录为什么是Ffuf基本使用最基本的使用多个字典同时使用带cookie扫描&#xff08;-b&#xff09;静默模式&#xff08;-s&#xff09;递归扫描&#xff08;-recursion&#xff09;指定扩展名&#xff08;-e&#xff09;POST请求爆破方式1&#xff1a;指明请求地址和请求体【不推…

MySQL常用函数汇总

博文介绍&#xff1a; MySQL 包含了大量并且丰富的函数&#xff0c;这套 MySQL 函数大全只收集了几十个常用的&#xff0c;剩下的比较 罕见的函数我们就不再整理了。 MySQL 控制流程函数 IF判断&#xff0c;流程控制IFNULL判断是否为空CASE搜索语句MySQL聚合函数 MAX查询指…

利用ENVI对遥感图像校正

1.几何校正 引起图像几何变形一般分为两大类:系统性和非系统性。系统性一般由传感器本身引起&#xff0c;有规律可循和可预测性&#xff0c;可以用传感器模型来校正&#xff0c;卫星地面接收站已经完成这项工作;非系统性几何变形是不规律的&#xff0c;它可以是传感器平台本身…

Vue3 中 Vite 和 Vue-cli 的特点和区别

目录1. 创建3.0项目Vite 与 Vue-cli 是什么&#xff1f;Vue-cli 的特点&#xff1a;Vite 的特点&#xff1a;Vite 和 Vue-cli的区别&#xff1a;总结&#xff1a;1. 创建3.0项目 vue-cli : 安装并执行 npm init vuelatest 选择项目功能时&#xff1a; 除了第一项的项目名字外…

基于Java(JSP+Servlet)+Mysql实现的(Web)简易的工资管理系统【100010062】

1.问题描述 一个公司下分为若干部门&#xff0c;每个部门有若干职员和经理&#xff0c;每个部门经销若干种商品。工资由基本工资、产品销售业绩奖、若干种保险的扣除等组成。其中的销售业绩奖按以下方式设计&#xff1a;职员按其完成额的 5% 提成&#xff0c;经理按其部门完成…