###题目链接###

题目大意: 给你一个 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、故结合二式,求得 k与 k2 互斥时的解即可。很直接的做法是 枚举根号 2n 中的 k与  k,判断是否互质,但由于本题时限仅为 500ms,会导致超时。

4、分析一下,如果 k1 与 k为 2n 的因数且它们互质,当且仅当 k1 与 k各不含有相同的 2n的质因子,故可枚举 2n 的所有质因子,将某个或某些质因子只放在

k1 或 k当中,那么它们就互质了。

比如 36 质因式分解为:2 * 2 * 3 * 3 ,质因子为 2 和 3,可以将 2 全部归于 k,剩下的全部归于 k2 ,那么 k1 = 2 * 2 = 4 ,k= 3 * 3 = 9 ,它们互质。

注意:

对一式扩欧求解时,需要注意他的第二项系数为负的,之前说负号先给到 a ,然后再以系数为 k2 、 k时求得解,得出来的解 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题 鱼跃龙门的更多相关文章

  1. Comet OJ - Contest #10 B题 沉鱼落雁

    ###题目链接### 题目大意:有 n 个正整数,每个正整数代表一个成语,正整数一样则成语相同.同一个正整数最多只会出现 3 次. 求一种排列,使得这个排列中,相同成语的间隔最小值最大,输出这个最小间 ...

  2. Comet OJ - Contest #10 C.鱼跃龙门

    传送门 题意: 求最小的\(x\),满足\(\frac{x(x+1)}{2}\% n=0,n\leq 10^{12}\). 多组数据,\(T\leq 100\). 思路: 直接考虑模运算似乎涉及到二次 ...

  3. Comet OJ - Contest #10 鱼跃龙门 exgcd+推导

    考试的时候推出来了,但是忘了 $exgcd$ 咋求,成功爆蛋~ 这里给出一个求最小正整数解的模板: ll solve(ll A,ll B,ll C) { ll x,y,g,b,ans; gcd = e ...

  4. Comet OJ - Contest #4 B题 奇偶性

    题目链接:https://www.cometoj.com/contest/39/problem/B?problem_id=1577 题意:给你一个数列,求L 到 R 区间内 所有数列 (ƒn mod ...

  5. Comet OJ - Contest #0 A题 解方程 (数学)

    题目描述 小象同学在初等教育时期遇到了一个复杂的数学题,题目是这样的: 给定自然数 nn,确定关于 x, y, zx,y,z 的不定方程 \displaystyle \sqrt{x - \sqrt{n ...

  6. Comet OJ - Contest #2 C题 言论的阴影里妄想初萌

    题目描述 Takuru 是一名能力者,他在地震时获得了念力致动的能力.所以他经常用自己的能力去干一些奇奇怪怪的事情. 有一天他获得了一张 nn 个点的无向完全图,之后他使用了能力,导致这张图的 \fr ...

  7. Comet OJ - Contest #11 B题 usiness

    ###题目链接### 题目大意:一开始手上有 0 个节点,有 n 天抉择,m 种方案,在每天中可以选择任意种方案.任意次地花费 x 个节点(手上的节点数不能为负),使得在 n 天结束后,获得 y 个节 ...

  8. Comet OJ - Contest #11 题解&赛后总结

    Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...

  9. Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」

    来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...

随机推荐

  1. powershell 基础

    目录 本教程概述 用到的工具 标签 简介 0x01使用简介 0x02脚本编写 0x03实例讲解 本教程概述 本课我们学习powershell使用. 用到的工具 cmd.exe   powershell ...

  2. windows进程中的内存结构(缓冲溢出原理)

    接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据.那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论.下文中的C语言代码如没有特别声明,默认都使 ...

  3. 『嗨威说』算法设计与分析 - 动态规划思想小结(HDU 4283 You Are the One)

    本文索引目录: 一.动态规划的基本思想 二.数字三角形.最大子段和(PTA)递归方程 三.一道区间动态规划题点拨升华动态规划思想 四.结对编程情况 一.动态规划的基本思想: 1.1 基本概念: 动态规 ...

  4. .NET中国开发者峰会11.9 下午分会场1 内容解析

    China .NET Conf 2019中国 .NET 开发者峰会即将在上海召开,这次大会是一届完全由社区组织举办的中国.NET 开发者盛会,我们筹备大会之初就定下了大会的主题是“开源.共享.创新”. ...

  5. Python 调用图灵机器人 API

    ''' Python3''' import requests #导入requests库 import json #导入json库 key = '3119f1e3610f42c5977ea73c4097 ...

  6. JavaWeb EL表达式 key为数值 Map取不到值

    JavaWeb  EL表达式 key为 Map取不到值 因为JSTL会把Integer,Byte,Short,Charactor都转成Long,这样就取不到值. 参见StackOverFlow的回答 ...

  7. (day31) Event+协程+进程/线程池

    目录 昨日回顾 GIL全局解释器锁 计算密集型和IO密集型 死锁现象 递归锁 信号量 线程队列 FOFI队列 LIFO队列 优先级队列 今日内容 Event事件 线程池与进程池 异步提交和回调函数 协 ...

  8. ZTUnity Profiler概述及Profiler window 说明

    转贴链接:https://www.jianshu.com/p/ca2ee8a51754

  9. 替换dom操作

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Linux 操作点滴

    1. 查找文件内容 find -type f -name '*' | xargs grep '' 2. 查看所有环境变量 env 3. so动态库文件查找路径:/lib    /usr/lib   / ...