###题目链接###

题目大意: 给你一个 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. css div 自适应内容

    .adapt-content{ display:inline-block; *display:inline; ; } 见:http://www.cnblogs.com/refe/p/5051661.h ...

  2. [Luogu2455] [SDOI2006]线性方程组

    题目描述 已知n元线性一次方程组. 其中:n<=50, 系数是[b][color=red]整数<=100(有负数),bi的值都是整数且<300(有负数)(特别感谢U14968 mmq ...

  3. mysqldump导出 timestamp类型数据 时区偏差8小时

    1 出现原因 1.1 查看机器时区和MySQL的时区 #查看linux的机器时区: [root@mysql-150 ~]# date -R Wed, 23 Oct 2019 14:10:04 +080 ...

  4. POJ 3259 Wormholes(Bellman-Ford)

    题目网址:http://poj.org/problem?id=3259 题目: Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Su ...

  5. 测试中常用sql

    1.增删改查 2.同一服务器下,要从一个数据库复制某张表到另一个数据库 create table test.sf_audit_plan as select * from v3_0_sf_full.sf ...

  6. Js极客之路 - 优化操作(性能优化)

    1.因为每次For循环都会计算一次arr.length,所以有必要存储数组长度以减少计算.针对这篇文章(http://www.crimx.com/2015/04/21/should-array-len ...

  7. 使用css把placeholder值渐渐消失

    复制过去就行了,不要问我为什么,就两个字爽快input:focus {outline: none; } input:focus::-webkit-input-placeholder {text-ind ...

  8. Java集合框架个人学习笔记

    从网上粘贴的结构图 Collection ├List │├LinkedList │├ArrayList │└Vector(了解,已过时) │ └Stack └Set    Map ├Hashtable ...

  9. Java基础(十九)集合(1)集合中主要接口和实现类

    1.Java集合框架为不同类型的集合定义了大量接口 其中,集合有两个基本接口:Collection和Map. 2.各接口的主要特征如下 (1)Collection接口:是List接口.Set接口和Qu ...

  10. MIT线性代数:16.投影矩阵和最小二乘