Comet OJ - Contest #10 C题 鱼跃龙门
题目大意: 给你一个 n ,让你求出最小的正整数 x 使得 x * (x + 1) / 2 % n == 0 ,即 x * (x + 1) % 2n == 0 。
分析:
1、由于 x * (x + 1) 为 2n 的倍数,故分离出它们各自的某个因数使得 k1 * k2 == 2n 。
则令 k2 * b = x + 1 ,k1 * a = x 。则有:
2、显然上述 一式 为不定方程,倘若先将负号放到 a 里面,则系数分别为 k2 与 k1 ,有解 b 与 a 当且仅当 gcd(k2,k1) | 1 ,故 k2 与 k1 必须互质。
3、故结合二式,求得 k1 与 k2 互斥时的解即可。很直接的做法是 枚举根号 2n 中的 k1 与 k2 ,判断是否互质,但由于本题时限仅为 500ms,会导致超时。
4、分析一下,如果 k1 与 k2 为 2n 的因数且它们互质,当且仅当 k1 与 k2 各不含有相同的 2n的质因子,故可枚举 2n 的所有质因子,将某个或某些质因子只放在
k1 或 k2 当中,那么它们就互质了。
比如 36 质因式分解为:2 * 2 * 3 * 3 ,质因子为 2 和 3,可以将 2 全部归于 k1 ,剩下的全部归于 k2 ,那么 k1 = 2 * 2 = 4 ,k2 = 3 * 3 = 9 ,它们互质。
注意:
对一式扩欧求解时,需要注意他的第二项系数为负的,之前说负号先给到 a ,然后再以系数为 k2 、 k1 时求得解,得出来的解 a 按理是需要取相反数的。
其次,由于得出来的 -a 不一定是最小正整数解,故需要对 k2/g 取余,这里的 g 为 1 ,故对 k2 取余即可。若结果为负数,需要加上 k2/g 变为最小正整数解。
(该题求的是不定方程的第二项 y ,若要求不定方程的第一项 x 的最小正数解,需要对 (第二项的系数)/g 取余得到,详见可结合我的 另一篇文章 ,最底下有方程组与解释 )
代码如下:
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
#define INF 1e17
#define maxn 1000008
typedef long long ll;
int cnt,tot;
bool vis[maxn];
int t;
int prime[maxn];
ll n,ans;
ll m[];
void biao()
{
vis[]=vis[]=true;
for(int i=;i<=;i++){
if(!vis[i]) prime[++cnt]=i;
for(int j=;j<=cnt&&i*prime[j]<=;j++){
vis[i*prime[j]]=true;
if(i%prime[j]==) break;
}
}
return;
}
ll exgcd(ll a,ll b,ll &x,ll &y){
if(!b){
x=;
y=;
return a;
}
else{
ll g=exgcd(b,a%b,x,y);
ll temp=x;
x=y;
y=temp-(a/b)*y;
return g;
}
}
void dfs(int i,ll k1,ll k2){
if(i==tot+){
ll a,b;
exgcd(k2,k1,b,a);
a=-a;
a%=k2;
if(a<=) a+=k2;
ans=min(ans,k1*a);
return;
}
dfs(i+,k1*m[i],k2),dfs(i+,k1,k2*m[i]);
return;
}
int main()
{
biao();
scanf("%d",&t);
while(t--)
{
tot=;
ans=INF;
scanf("%lld",&n);
n*=2ll;
for(int i=;i<=cnt&&prime[i]*prime[i]<=n;i++){
if(n%prime[i]==){
ll res=;
while(n%prime[i]==){
n/=prime[i];
res*=prime[i];
}
m[++tot]=res;
}
}
if(n!=) m[++tot]=n;
dfs(,1ll,1ll);
printf("%lld\n",ans );
}
}
Comet OJ - Contest #10 C题 鱼跃龙门的更多相关文章
- Comet OJ - Contest #10 B题 沉鱼落雁
###题目链接### 题目大意:有 n 个正整数,每个正整数代表一个成语,正整数一样则成语相同.同一个正整数最多只会出现 3 次. 求一种排列,使得这个排列中,相同成语的间隔最小值最大,输出这个最小间 ...
- Comet OJ - Contest #10 C.鱼跃龙门
传送门 题意: 求最小的\(x\),满足\(\frac{x(x+1)}{2}\% n=0,n\leq 10^{12}\). 多组数据,\(T\leq 100\). 思路: 直接考虑模运算似乎涉及到二次 ...
- Comet OJ - Contest #10 鱼跃龙门 exgcd+推导
考试的时候推出来了,但是忘了 $exgcd$ 咋求,成功爆蛋~ 这里给出一个求最小正整数解的模板: ll solve(ll A,ll B,ll C) { ll x,y,g,b,ans; gcd = e ...
- Comet OJ - Contest #4 B题 奇偶性
题目链接:https://www.cometoj.com/contest/39/problem/B?problem_id=1577 题意:给你一个数列,求L 到 R 区间内 所有数列 (ƒn mod ...
- Comet OJ - Contest #0 A题 解方程 (数学)
题目描述 小象同学在初等教育时期遇到了一个复杂的数学题,题目是这样的: 给定自然数 nn,确定关于 x, y, zx,y,z 的不定方程 \displaystyle \sqrt{x - \sqrt{n ...
- Comet OJ - Contest #2 C题 言论的阴影里妄想初萌
题目描述 Takuru 是一名能力者,他在地震时获得了念力致动的能力.所以他经常用自己的能力去干一些奇奇怪怪的事情. 有一天他获得了一张 nn 个点的无向完全图,之后他使用了能力,导致这张图的 \fr ...
- Comet OJ - Contest #11 B题 usiness
###题目链接### 题目大意:一开始手上有 0 个节点,有 n 天抉择,m 种方案,在每天中可以选择任意种方案.任意次地花费 x 个节点(手上的节点数不能为负),使得在 n 天结束后,获得 y 个节 ...
- Comet OJ - Contest #11 题解&赛后总结
Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...
- Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」
来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...
随机推荐
- Qt5教程: (4) 带参数信号与槽
在subwidget.h中声明一个signal. 和之前的信号函数重名但是有参数: void backSignal(QString); 之后在subwidget.cpp的槽函数sendSignal() ...
- HOOK 技术
在介绍 截获系统消息钩子 之前,这几个函数是密切相关的: SetWindowsHookEx() 介绍: 功能:将应用程序定义的挂钩过程安装到挂钩链中. 函数原型:HHOOK SetWindowsHoo ...
- 渗透-svn源代码泄露漏洞综合利用
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion ...
- Vmware Ubuntu 开机蓝屏
引用:http://tieba.baidu.com/p/4898482611 1. 这是vm的一个bug!!!打开你的虚拟系统目录,编辑虚拟机文件夹下面的.vmx 用记事本打开,加入代码. cpuid ...
- RequireJS 插件
网址:http://www.requirejs.cn/docs/api.html#i18n RequireJS的插件: Text:自动加载一些非js的文本文件. domReady:确保在Dom Rea ...
- KMP算法复习笔记
KMP 算法 KMP 算法是一种改进的字符串匹配算法,KMP 算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的.具体实现就是实现一个next()函数,函数本身包含了 ...
- MyCat教程二:mysql主从复制实现
单个mysql数据库在处理业务的时候肯定是有限的,这时我们扩展数据库的第一种方式就是对数据库做读写分离(主从复制),本文我们就先来介绍下怎么来实现mysql的主从复制操作. 1. 读写分离 原 ...
- 图像处理 - ImageMagick 简单介绍与案例
在客户端我们可以用 PhotoShop 等 GUI 工具处理静态图片或者动态 GIF 图片,不过在服务器端对于 WEB 应用程序要处理图片格式转换,缩放裁剪,翻转扭曲,PDF解析等操作, GUI 软件 ...
- ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...