首页 > 其他分享 >「CF1766D」 Lucky Chains

「CF1766D」 Lucky Chains

时间:2024-03-22 15:33:40浏览次数:27  
标签:lmx CF1766D 互质 ll Lucky 因子 ans Chains dis

题意

给定 \(T\) 组整数 \(x,y(1\le x,y\le 10^7)\),求出整数 \(k\),使得 \((x,y),(x+1,y+1),\cdots,(x+k,y+k)\) 互质,\((x+k+1,y+k+1)\) 不互质,若 \(k\) 有无数解,输出 -1,否则输出 \(k\) 的值。

分析

当 \(y-x=1\) 时,\(k\) 有无数组解。

因为 \(\gcd(x+k,y+k)\ne 1\),由小学奥数的“更相减损术”,\(\gcd(y-x,x+k)\ne 1\)。

设 \(y-x\) 的因子为 \(a\),则最小的 \(k\) 为 \(a-(x\bmod a)\)。

可以直接枚举 \(a\),但因子太多了会超时。

发现质因子肯定比合因子更优,所以可以直接用素数筛,求解出 \(i\) 的最小质因子 \(lmx_i\),则可以直接用 \(lmx_{lmx_i}\) 代替暴力的枚举。

因为质因子最多有 \(\log y\) 个,所以总时间复杂度 \(O(T\log y)\)。

Code

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}
const ll maxn=1e7+5;
ll t,num[maxn],tot,lmx[maxn];
bool vis[maxn];
inline void prime_set(ll n){
	vis[0]=vis[1]=1;
	for(ll i=2;i<=n;++i){
		if(!vis[i]){
            num[++tot]=i,lmx[i]=i;
        }
        for(ll j=1;j<=tot&&i*num[j]<=n;++j){
            vis[i*num[j]]=num[j];
            lmx[i*num[j]]=num[j];
            if(i%num[j]==0)break;
        }
	}
}
signed main(){
    t=read();
    prime_set(10000000);
    while(t--){
        ll x=read(),y=read(),ans=LLONG_MAX,dis=y-x;
        if(dis==1){puts("-1");continue;}
        if(__gcd(x,y)!=1){puts("0");continue;}
        while(dis>1){
            ans=min(ans,lmx[dis]-x%lmx[dis]);
            dis/=lmx[dis];
        }
        if(ans==LLONG_MAX)ans=-1;
        printf("%lld\n",ans);
    }
    return 0;
}

标签:lmx,CF1766D,互质,ll,Lucky,因子,ans,Chains,dis
From: https://www.cnblogs.com/run-away/p/18089603

相关文章

  • CF145C Lucky Subsequence 题解
    首先,我们对这个幸运数进行分析,发现:\(10^9\)以内只有\(1023\)个幸运数,即\(\sum\limits_{i=0}^92^i\)个。考虑对幸运数和非幸运数分类讨论。幸运数部分:01背包裸题,\(dp_{i,j}\)表示前\(i\)个幸运数里选了\(j\)个,转移方程为\(dp_{i,j}=dp_{i-1,j}+dp_{i-1,j-1}\tim......
  • hdu 4460 Friend Chains (图最长路的最小值)
    Problem-4460(hdu.edu.cn)写完提交答案错了,后面发现vis初始化的地方错了,以前BFS都只调用一次,看来我中毒太深。这个题更能体现BFS的特性,增加dis数组记录距离。#include<iostream>#include<queue>#include<cstring>#include<vector>#include<map>usingnamespacestd;c......
  • CF145E Lucky Queries 题解
    题目链接:CF或者洛谷前置知识点:序列操作本文关键词约定俗称:因为频繁敲最长不下降子序列\(LNCS\)和最长不上升子序列\(LNIS\)太麻烦了,下文将\(000011111\)这种最长不降子序列用\(LIS\)描述,\(1111100000\)这种最长不升子序列用\(LDS\)描述。这里面只有\(4\)和\(7......
  • 解决每次启动wsl地址都会变化,导致proxychains4得手动替换ip地址的问题
    前言由于每次启动wsl的地址都会发生改变,使用proxychains4每次都得修改配置文件,因为我连的热点,所以本机ip地址也老是会变,如果是在校园网等ip地址不会频繁变化的网络环境下,可以直接使用本机ip地址解决方案让手动变自动了(bushi首先查看自己的/etc/proxychains4.conf,我的这个ip地......
  • CF121E Lucky Array
    题意给定一个序列,维护下列操作。区间加区间查询数中只包含\(4,7\)数的个数。所有数前后不超过\(1e4\)。Sol块块版。\(1e4\),发现满足条件的数的个数只有\(30\)个。对于每个块开一个桶,记录每种数有多少个。查询时暴力枚举\(30\)个数,暴力判断即可。修改是平凡的......
  • maven toolchains 简单说明
    很多时候我们项目可以会包含需要不同jdk构建,比如有些只能使用jdk8,有些需要使用jdk11,toolchains可以帮助我们解决此问题一般玩法创建一个toolchains.xml目录,放到home目录下,里边配置实际需要的jdk版本(我们的环境可以安装多jdk)项目构建的时候(使用的插件)使用配置的工具参考配置......
  • maven toolchains 简单说明
    很多时候我们项目可以会包含需要不同jdk构建,比如有些只能使用jdk8,有些需要使用jdk11,toolchains可以帮助我们解决此问题一般玩法创建一个toolchains.xml目录,放到home目录下,里边配置实际需要的jdk版本(我们的环境可以安装多jdk)项目构建的时候(使用的插件)使用配置的工具参考......
  • Lucky-Canvas抽奖插件的使用
    官方网站:https://100px.net/新建一个空白的js文件’lucky-canvas.js‘,复制官网的JS代码'https://unpkg.com/[email protected]/dist/index.umd.js'新建一个html网页'lucky-canvas.html',引入刚刚新建的js文件<!doctypehtml><html><head><metacharset="......
  • luckysheet 双击单元格 浮动单元格错位问题
    U1S1用luckysheet久了真的会很不幸。  问题描述(部分文字已经擦掉了):弹窗下会sheet出现双击显示异常的情况,如果只是文本框还好,解决不了还能凑合用用,直到今天我发现复制日期后,直接双击会自动带个date-picker,然后这个东西也错位,我真的是艹了。最关键是这个东西不在已经支持的......
  • E - Lucky bag
    E-LuckybagProblemStatementAtCoderInc.sellsmerchandiseonitsonlineshop.Thereare$N$itemsremaininginthecompany.Theweightofthe$i$-thitem$(1\leqi\leqN)$is$W_i$.Takahashiwillselltheseitemsas$D$luckybags.Hewantstomin......