首页 > 其他分享 >gcd纯数学思维

gcd纯数学思维

时间:2023-04-06 15:44:26浏览次数:36  
标签:思维 gcd int 因子 纯数学 倍数 ans now

  1. a - b = 1时特判
  2. 可以推出gcd(a+k,b+k) == gcd(a+k,b - a),具体证明见https://codeforces.com/blog/entry/110066
  3. 设两个的结果分别为g和h,显然a+k和b+k都是g的倍数,那么让其中一个大的倍数减掉一个小的倍数,显然还是g的倍数,充分性成立
  4. 反证法也同理,a+k和b-a肯定都是h的倍数,一个倍数加上另一个倍数,肯定还是h的倍数,必要性成立
  • 接下来只需要找到b-a的质因子判断a+k是否有重复因子
  • 一个一个加显然超时,我们可以先预处理出每个数字的最大质因子,然后利用传递性,得到关于b-a的所有质因子
  • 设当前质因子为temp,更新答案的方法就是ans = min(ans,(temp - a%temp) % temp)

代码

#include<bits/stdc++.h>
#define debug1(a) cout<<#a<<'='<< a << endl;
#define debug2(a,b) cout<<#a<<" = "<<a<<"  "<<#b<<" = "<<b<<endl;
#define debug3(a,b,c) cout<<#a<<" = "<<a<<"  "<<#b<<" = "<<b<<"  "<<#c<<" = "<<c<<endl;
#define debug4(a,b,c,d) cout<<#a<<" = "<<a<<"  "<<#b<<" = "<<b<<"  "<<#c<<" = "<<c<<"  "<<#d<<" = "<<d<<endl;
#define debug5(a,b,c,d,e) cout<<#a<<" = "<<a<<"  "<<#b<<" = "<<b<<"  "<<#c<<" = "<<c<<"  "<<#d<<" = "<<d<<"  "<<#e<<" = "<<e<<endl;
#define debug0(x) cout << "debug0: " << x << endl
#define fr(t, i, n)for (long long i = t; i < n; i++)
#define YES cout<<"Yes"<<endl
#define nO cout<<"no"<<endl
#define fi first
#define se second
//#define int long long
using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;
typedef pair<LL,LL> PLL;

//#pragma GCC optimize(3,"Ofast","inline")
//#pragma GCC optimize(2)

const int N = 2e5+10,M = 1e7+10;
int to[M];
void solve() 
{
	int x,y;scanf("%d%d",&x,&y);
	if(y == x+1)
	{
		printf("-1\n");
		return ;
	}
	
	int now = y - x;
	int ans = 1e9;
	for(;now != 1;now /= to[now])
		ans = min(ans, (now - x % to[now]) % to[now]);
	
	printf("%d\n",ans);
}

signed main()
{
    /*
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    */

   	to[1] = 1;//每个数字到它最大的质因子
   	for(int i = 2;i < M;i ++)if(!to[i])
	{
		for(int j = i;j < M;j += i)to[j] = i;
	}

    int T = 1;
	scanf("%d",&T);
	//cin >> T;
    while(T--){
        solve();
    }
    return 0;
}

标签:思维,gcd,int,因子,纯数学,倍数,ans,now
From: https://www.cnblogs.com/cfddfc/p/17292968.html

相关文章

  • gcd交互题
    https://codeforces.com/contest/1762/problem/D给一个长度为n的permutation,每次一个询问,得到结果为gcd(i,j),请在2*n次之内找到那个是0(或者哪两个之中之一是0)思路三个指针i,j,k(i<j<k)令x=gcd(a[i],a[j]),y=gcd(a[i],a[k]);如果x==y,显然a[i]>0如果x<y,可以证明a[j]>0如果x......
  • 用Wpf做一个思维导图(续3-Diagram画板)
    先上一张简易效果图,本次更新主要仿照百度脑图。同样老规矩,先上源码地址:https://gitee.com/akwkevin/aistudio.-wpf.-diagram本次扩展主要内容:1.思维导图、目录组织图、鱼骨头图、逻辑结构图、组织结构图,入口在文件新建下。2.思维导图工具栏(只有思维导图模式下可见)2.1插入......
  • Midjourney? 文心一格? 一张思维导图带你了解图片生成AI
    (“马爸爸开心回国图”,图片使用Midjourney生成) 最近和ChatGPT大语言模型一样大火的还有图片生成AI(Text-To-Image),大家耳熟能详的Midjourney、StableDiffusion、Dalle2、Imagen等等都是图片生成AI,尤其是百度的文心一格上线后,网上的讨论(调侃)更加火热。 图片生成普遍采用Di......
  • leetcode题中的逆向思维——集锦
    417.太平洋大西洋水流问题虽然题目要求的是满足向下流能到达两个大洋的位置,如果我们对所有的位置进行搜索,那么在不剪枝的情况下复杂度会很高。因此我们可以反过来想,从两个大洋开始向上流,这样我们只需要对矩形四条边进行搜索。搜索完成后,只需遍历一遍矩阵,满足条件的位置即为两个......
  • 洛谷 P2398. GCD SUM
    题目描述求$$\sum\limits_{i=1}^n\sum\limits_{j=1}^n\gcd(i,j)$$输入:2输出:5算法1 线性筛 $O(n)$将式子变形:要知道一个前置定理$\sum\limits_{d|n}\varphi(d)=n$艾弗森约定:定义$\\\[P]$=$$\begin{cases}P\text{}is\text{}tr......
  • 寒假每日一题——困牛排序(思维题)
    困牛排序问题描述FarmerJohn正在尝试将他的N头奶牛,方便起见编号为1…N,在她们前往牧草地吃早餐之前排好顺序。当前,这些奶牛以p1,p2,p3,…,pN的顺序排成一行,FarmerJohn站在奶牛p1前面。他想要重新排列这些奶牛,使得她们的顺序变为1,2,3,…,N,奶牛1在FarmerJohn旁......
  • 02142数据结构导论-考试大纲思维导图
    第一章第二章第三章第四章第五章第六章第七章思维导图下载地址(MindMaster绘制):链接:https://pan.baidu.com/s/1kaoT394M-EG3w05sdC9eqQ?pwd=6060提取码:6060......
  • (转)Golang 编程思维和工程实战
    原文:https://zhuanlan.zhihu.com/p/426368274一Golang编程思维首先,我们先来看下最基本的,就是Golang的学习技巧,比如:通读Golang的一些好的文章如 FrequentlyAskedQuestions(FAQ)或者看看 FAQ的中文翻译 ,主要是了解Golang的全貌。Go精华文章列表Go相关博客......
  • 组件化的思维
    关于代码的组件化,我一直认为都是有必要的。我所坚持该观点主要来自于以下几项。结构最小化维护性扩展性抽象代码是结构最小化必备的思想。为什么?从编码角度,代码可以......
  • OpenScenario场景仿真结构思维导图, OpenScenario是 自动驾驶仿真软件carla推出来的场
    OpenScenario场景仿真结构思维导图,OpenScenario是自动驾驶仿真软件carla推出来的场景仿真标准,可配合carla一起完成整套自动驾驶的闭环仿真过程,将场景搭建变成可编程化的......