[gmoj 7177]鱼跃龙门

news/2023/12/9 15:54:22

在这里插入图片描述
思路:
我们很容易想到,题目要我们求得答案为
( 1 + x ) x 2 % n = = 0 \frac{\left(1+x\right)x}2\%n==0 2(1+x)x%n==0
把除以2移项到右边
( 1 + x ) x % 2 n = = 0 (1+x)x\%2n==0 (1+x)x%2n==0
我们再回顾扩展欧几里得(exgcd)的柿子
a x + b y = g c d ( x , y ) ax+by=gcd(x,y) ax+by=gcd(x,y)
x + 1 = A s x+1=As x+1=As, x = B t x=Bt x=Bt,其中 A B = 2 n AB=2n AB=2n,那么 A s − B t = 1. As-Bt=1. AsBt=1.

从而得到一个做法,枚举所有可能的A,B的组合,
用exgcd求解最小正数x=Bt更新答案。

在这个题目中,若gcd(A,B)=1,我们求As+Bt=1的一组特解(s,t),从而令k=−t,(s,k)就是As−Bk=1的一组特解。我们要求x=Bk为最小正整数,而B是固定的正数,因而让k取最小正整数即可。显然地,若(s,k)是一组解,则u为整数时,(s+uB,k+uA)也是一组解。所以k<=0时取(k mod A ) +A,k>0时取(k mod A ) A即可。有些题目中gcd(A,B)!=1,此时用)A/gcd(A,B)和B/gcd(A,B)作为调整步长即可。

答案要求gcd(x,y)=1,就是x,y是互质的两个数,毕竟x,y是相邻的两个数。
考虑将2n质因数分解,分解出来的某一个质因数一定是全部属于x或y的。
否则两个数一定不是互质的。

#include <cstdio>
#include <iostream>
#define ll long long
//#pragma GCC optimize(2)
#define reg registerusing namespace std;const ll N = 1000000;ll T, n, p[N], ans, m, a[30], cnt;
bool S[N];void exgcd(ll a1, ll b1, ll &x, ll &y)
{if(!b1){x = 1, y = 0;return;}exgcd(b1, a1 % b1, x, y);ll t = x;x = y;y = t - a1 / b1 * y;
}void dfs(ll x, ll a1, ll b1)
{if(x > m){ll x1, y;exgcd(a1, b1, x1, y);y = -y;y %= a1;if(y <=0) y += a1;ans = min(ans, y * b1);return ;}dfs(x + 1, a1 * a[x], b1);dfs(x + 1, a1, b1 * a[x]);
}int main()
{for(reg ll i = 2; i <= N; i++){if(S[i]) continue;p[++cnt] = i;for(reg ll j = i + i; j <= N; j+=i)S[j] = 1;} scanf("%lld", &T);while(T--){scanf("%lld", &n);n *= 2;ans = n - 1;m = 0;for(reg ll i = 1; i <= cnt && p[i] <= n; i++){if(n % p[i] != 0) continue;a[++m] = 1;while(n % p[i] == 0) n /= p[i], a[m] *= p[i];}if(n > 1) a[++m] = n;dfs(1ll, 1ll, 1ll);printf("%lld\n", ans);}return 0;
}

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

相关文章

链表的基本操作

链表的基本操作 链表的分类 单向/双向&#xff08;引入了 prev 引用&#xff09;带傀儡节点/不带傀儡节点&#xff08;dummy node&#xff09;带环/不带环 链表的遍历 遍历方式可利用 while 或者 for 循环来进行实现&#xff0c;主要代码块可展示为&#xff1a; //for循环…

链表:常见面试题-拷贝特殊链表

题目&#xff1a; 一种特殊的单链表节点类描述如下: class Node { int value; Node next; Node rand; Node(int val) {value val} } rand指针是单链表节点结构中新增的指针&#xff0c;rand可能指向链表中的任意一个节点&#xff08;包括自己&#xff09;&#xff0c;也可…

盐城市公交路线及时刻表

盐城B支1路公交车运营时间&#xff1a;6:00--20:30 单程票价&#xff1a;1元 途经道路&#xff1a;城西公交回车场-西环路-建军西路-太平路-大庆路-解放路-青年路-亭湖大道-生物工程学校城西公交回车场- 蟒蛇河大桥(北&#xff09; - 市一院 - 泰山庙 - 市房产交易市场 - 太平人…

哈希表--day2--(leetcode242/leetcode383/leetcode49/leetcode438)

文章目录 leetcode242.有效的字母异位词基本思路AC-code leetcode383. 赎金信基本思路AC-code leetcode49.字母异位词分组基本思路AC-code leetcode438.找到字符串中所有字母异位词基本思路AC-code leetcode242.有效的字母异位词 链接 基本思路 思路实际上很简单&#xff0c…

Java三大器小结

filter实例/filter实例/监听器实例过滤和拦截区别/Listener实例/Listener实例

Servlet 三大器

文章目录 脑图 英文博客

大器人生

大器人生 古希腊著名政治家伯利克里任雅典首席官时&#xff0c;由于进行了一系列改革&#xff0c;反对者甚众&#xff0c;有人当面辱骂&#xff0c;但他从不动怒。一天傍晚&#xff0c;一个市民还闯进伯利克里的屋子&#xff0c;一进门就对着他骂个不停。但伯利克里只是静静地坐…

python三大_Python之三大器

一、装饰器 闭包函数 闭&#xff1a;指的是定义在函数内部的函数 比如手机是闭包函数(内层函数)&#xff0c;被手机包装盒 (外层函数) 包裹起来&#xff0c; 手机可以使用包装盒中的东西&#xff0c;内层函数可以引用外层函数的名字。 闭包函数&#xff1a;定义在函数内部的函数…

高频谐振功放大器

高频谐振功率放大器的主要特点是&#xff1a;输出功率足够大、效率高、非线性失真小及频带宽度 影响放大器输出功率的主要因素 功率管本身的集电极最大允许电流、反向击穿电压和最大允许耗散功率 提高放大器输出功率的方法 高频输出功率是高频放大器在输入信号的控制下&#…

java中三web_Java Web中的三大器

java Web中的三大器 先看一张图&#xff0c;对三大器的的作用范围有一个大致的了解 java三大器.PNG 监听器(listener) 作用 1.首先监听器的作用的范围最长。 2.监听器的监听事件源分别为ServletContext&#xff0c;HttpSession和ServletRequest这三个域对象。 因此&#xff0c;…

python三大器_python三大器(装饰器/生成器/迭代器)

1装饰器 1.1基本结构 def 外层函数(参数): def 内层函数(*args,**kwargs); return 参数(*args,**kwargs) return 内层函数 外层函数 def index() pass #示例: def func(arg): def inner(): v arg() return v return inner func def index(): print(123) return 666 print(inde…

函数的三大器

迭代器 1.函数名的使用以及第一类对象 2.闭包 3.迭代器 一.函数名的运用 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量 1.函数名的内存地址 def func():print(呵呵) print(func)# 结果: # <function func at 0x0000000000502E18> 2.函数名可以赋…

Spring boot三大器

在Spring boot 中的应用中的三大拦截机制 Filter 、Interceptor 、Aspect 1、Filter Filter功能&#xff1a;可以拿到原始的http请求&#xff0c;但是拿不到你请求的控制器和请求控制器中的方法的信息 Filter使用&#xff1a; package com.llangzh.filter;import java.io.I…

python三大器_Python 入门之 Python三大器 之 迭代器

1、迭代器 (1)可迭代对象 <1> 只要具有__ iter__()方法就是一个可迭代对象 (我们可以通过dir()方法去判断一个对象具有什么方法&#xff0c;dir()会返回一个列表&#xff0c;这个列表中含有该对象的以字符串的形式的所有方法名) lst.__iter__() dict.__iter__() <2>…

java3大器_阿里祭出大器,Java代码检查插件

【套装3本】代码整洁之道三部曲教材 176.8元 包邮 (需用券) 去购买 > 背景 前阵子阿里巴巴发布了<>。 不久&#xff0c;又一气呵成发布了Eclipse/Intellij Idea下的代码检测插件PC3&#xff0c;可谓是国内代码优秀的检测插件。此插件检测的标准是根据<>上面制定…

windows pe文件导入表隐藏

前言 分析过一些文件&#xff0c;发现里面都会对引用的api进行动态获取&#xff0c;然后通过内存指针调用。细细想来&#xff0c;这种方法还是有一定的对抗作用的&#xff0c;如果别人想要分析的必须的稍微深入或者动态调试一下。然后&#xff0c;我就想着该如何实现这种用法呢…

python三大器,Python 入门之 Python三大器 之 生成器

Python 入门之 Python三大器 之 生成器 1、生成器 (1)什么是生成器&#xff1f; 核心&#xff1a;生成器的本质就是一个迭代器 迭代器是Python自带的 生成器程序员自己写的一种迭代器 def func(): print("这是一个函数") return "函数" func() def func():…

java三大器

拦截器&#xff1a;利用反射的机制实现&#xff0c;针对action、日志、未登录用户。 4.1&#xff0c;拦截器是基于java反射机制来实现的&#xff0c;而过滤器是基于函数回调来实现的。&#xff08;有人说&#xff0c;拦截器是基于动态代理来实现的&#xff09; 4.2&#xff0…

java 三大器

过滤器&#xff08;Filter&#xff09; 所谓过滤器顾名思义是用来过滤的&#xff0c;Java的过滤器能够为我们提供系统级别的过滤&#xff0c;也就是说&#xff0c;能过滤所有的web请求&#xff0c;这一点&#xff0c;是拦截器无法做到的。在Java Web中&#xff0c;你传入的requ…

python三大器_Python - 三大器 迭代器,生层器,装饰器

Python - 三大器 迭代器,生层器,装饰器 在介绍三大器之前先来了解一下容器和可迭代对象... 一. 容器 容器是一种把多个元素组织在一起的数据结构&#xff0c;容器中的元素可以逐个地迭代获取&#xff0c;可以用in, not in关键字判断元素是否包含在容器中。通常这类数据结构把所…
最新文章