正题

题目链接:https://cometoj.com/problem/1479


题目大意

给出\(n\)求一个最小的\(x(x>0)\)满足

\[\left(\sum_{i=1}^xi\right)\equiv 0(\mod n)
\]

\(1\leq n\leq 10^{12},1\leq T\leq 100\)


解题思路

转成等比数列求和就是

\[\frac{i(i+1)}{2}\equiv 0(\mod n)\Rightarrow i(i+1)=2kn
\]

从里面获得一下信息,考虑枚举\(2n\)的所有约数\(d\),那么我们有\(xd\times y\frac{2n}{d}=2kn\)。

也就是设\(y\frac{2n}{d}=xd+1\),这个式子我们用\(exgcd\)求出最小解然后所有里面取最小的。

然后是一点优化,首先暴力枚举约数是\(O(\sqrt n)\)的,我们可以质因数分解之后搜索就是\(O(\sigma_0(n))\)的了。

然后因为\(i\)和\((i+1)\)一定互质,所以\(d\)和\(\frac{2n}{d}\)不能有相同的质因子。

这样应该就能过了。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e6+10;
ll T,n,ans,cnt,tot,pri[N/10],p[30];
bool v[N];
void Prime(){
for(ll i=2;i<N;i++){
if(!v[i])pri[++cnt]=i;
for(ll j=1;j<=cnt&&i*pri[j]<N;j++){
v[i*pri[j]]=1;
if(i%pri[j]==0)break;
}
}
return;
}
ll exgcd(ll a,ll b,ll &x,ll &y){
if(!b){x=1;y=0;return a;}
ll d=exgcd(b,a%b,x,y);
ll z=y;y=x-(a/b)*y;x=z;
return d;
}
void solve(ll x,ll f){
if(x>tot){
if(f==1||f==n)return;
ll a=n/f,b=f,X,Y;
ll d=exgcd(a,b,X,Y);
Y=-Y;
if(X<0){Y+=((-X+b-1)/b)*a;X+=((-X+b-1)/b)*b;}
if(X>0){Y-=(X/b)*a;X-=(X/b)*b;}
if(Y<0){X+=((-Y+a-1)/a)*b;Y+=((-Y+a-1)/a)*a;}
ans=min(ans,min(X*a,Y*b));
return;
}
solve(x+1,f);
solve(x+1,f*p[x]);
return;
}
signed main()
{
Prime();
scanf("%lld",&T);
while(T--){
scanf("%lld",&n);tot=0;
n=n*2;ll x=n;ans=n-1;
for(ll i=1;i<=cnt;i++){
if(x%pri[i]==0){
p[++tot]=1;
while(x%pri[i]==0)
p[tot]*=pri[i],x/=pri[i];
}
}
if(x!=1){p[++tot]=x;}
solve(1,1);
printf("%lld\n",ans);
}
return 0;
}

CometOJ-[Contest #10]鱼跃龙门【exgcd】的更多相关文章

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

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

  2. 2016 Multi-University Training Contest 10

    solved 7/11 2016 Multi-University Training Contest 10 题解链接 分类讨论 1001 Median(BH) 题意: 有长度为n排好序的序列,给两段子 ...

  3. hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)

    CRB and Tree                                                             Time Limit: 8000/4000 MS (J ...

  4. 2015 Multi-University Training Contest 10 hdu 5406 CRB and Apple

    CRB and Apple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  5. 2015 Multi-University Training Contest 10 hdu 5412 CRB and Queries

    CRB and Queries Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  6. [二分,multiset] 2019 Multi-University Training Contest 10 Welcome Party

    Welcome Party Time Limit: 4000/4000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)T ...

  7. 2015 Multi-University Training Contest 10(9/11)

    2015 Multi-University Training Contest 10 5406 CRB and Apple 1.排序之后费用流 spfa用stack才能过 //#pragma GCC o ...

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

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

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

    ###题目链接### 题目大意: 给你一个 x ,让你求出最小的正整数 n 使得 n * (n + 1) / 2  % x == 0 ,即 n * (n + 1)  % 2x == 0 . 分析: 1 ...

随机推荐

  1. open62541(opcua)传输延迟探索小记

    缘起 将open62541作为中间件使用代替自定义数据的RPC,client通过订阅valueChange来接收数据.使用时发现有一些问题: 前后两次产生的数据相同时,不会触发valueChange ...

  2. mfc HackerTools远程线程注入

    在一个进程中,调用CreateThread或CreateRemoteThreadEx函数,在另一个进程内创建一个线程(因为不在同一个进程中,所以叫做远程线程).创建的线程一般为Windows API函 ...

  3. C#设计模式---迭代器模式(Iterator Pattern)

    一.目的 提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节. 二.定义 迭代器模式提供了一种方法访问一个聚合对象(理解为集合对象)中各个元素,而又无需暴露该对象的内部表示,这样既可 ...

  4. 深入浅出Mybatis系列(一)---Mybatis简介

    1.什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且 ...

  5. css - 响应式

    css - 响应式 移动设备尺寸 移动设备的尺寸各不相同,大体上可以做如下划分: 768px以下的是手机屏幕 768px-991px是平板ipad屏幕 992px-1199是大平板屏幕 1200极其以 ...

  6. linux(4)----------ssh config详解

    1.概述 ~~  config为了方便我们批量管理多个ssh ~~  config存放在~/.ssh/config                 .XX代表隐藏目录 ~~  config配置语法 2 ...

  7. 在ubuntu18.04上部署项目时遇到的问题总结

    因为在实验室中,有几台空闲的机子,我便选了一台准备做一个本地的服务器,因为买的阿里云学生机和之前用于FQ的机子感觉都不太顺手,阿里的学生机配置稍低,FQ用的服务器延迟太高.开始在centos和ubun ...

  8. JobExecutionContext中的JobDataMapjob与Detail与Trigger中的JobDataMapjob

    public static void main(String[] args) { //配置模式 build模式 //1.实例一个JOB JobDetail jobDetail = JobBuilder ...

  9. JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码

    JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码 准备条件:一个创建好的 JavaWeb 项目 步骤: 1.创建一个类并实现 Filter 接口 import javax.ser ...

  10. 基于Nginx实现负载均衡的部署

    Nginx(enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器. nginx官方网站:http://nginx.org/ nginx plus收费软件, ...