考试的时候推出来了,但是忘了 $exgcd$ 咋求,成功爆蛋~

这里给出一个求最小正整数解的模板:

ll solve(ll A,ll B,ll C)
{
ll x,y,g,b,ans;
gcd = exgcd(A,B,x,y);
if(C%gcd!=0) return -1;
x*=C/gcd,B/=gcd;
if(B<0) B=-B;
ans=x%B;
if(ans<=0) ans+=B;
return ans;
}

大概就是这样.

说一下题:

可以将题目转化成求 $\frac{ans(ans+1)}{2}\mod n=0$ 的最小 $ans$.
将式子转化一下,即 $ans(ans+1)=2n\times y$,其中 $y$ 是个整数.
易得 $ans$ 与 $ans+1$ 是互质的,所以 $2n$ 中每一种不同的质因子只能贡献给 $ans,ans+1$ 中的一个.
而 $10^{12}$ 以内的数字最多只会有不到十多个本质不同的质因子,所以可以枚举子集.
考虑枚举出 $A$ 和 $B$,令 $A\times x=ans,B\times y=ans+1$.
则需要满足 $Ax-By=-1,gcd(x,y)=1$
但其实我们发现 $gcd(x,y)=1$ 是不用判的,因位如果等式成立,则 $gcd(x,y)$ 就一定是 $1$.
那么,我们只需找到 $Ax-By=-1$ 的最小 $x$ 正整数解就行了.
这个可以用 $exgcd$ 直接求,但是有一些细节需要注意:

  1. $A,B$ 都需要大于 $0$.
  2. 我们想求 $x$,所以 $y$ 到底是多少我们是不关心的,直接无视掉就好.

Code:

#include <cstdio>
#include <vector>
#include <algorithm>
#define N 1000006
#define inf 100000000000000000
#define ll long long
#define LL long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
ll ans=exgcd(b,a%b,x,y);
ll tmp=x;
x=y,y=tmp-a/b*y;
return ans;
}
vector<ll>v;
int tot;
int prime[N],is[N];
void init()
{
int i,j;
for(i=2;i<N;++i)
{
if(!is[i]) prime[++tot]=i;
for(j=1;j<=tot&&1ll*prime[j]*i<1ll*N;++j)
{
is[prime[j]*i]=1;
if(i%prime[j]==0) break;
}
}
}
ll solve(ll A,ll B)
{
ll x,y,g,b,ans;
g = exgcd(A,B,x,y);
if(-1%g) return inf;
x*=-1/g,y*=g;
B/=g;
if(B<0) B=-B;
ans=x%B;
if(ans<=0) ans+=B;
return ans*A;
}
int main()
{
// setIO("input");
init();
int T,i,j;
scanf("%d",&T);
while(T--)
{
ll n,h,answer=inf;
scanf("%lld",&n),h=n;
for(i=1;i<=tot;++i)
{
if(h%prime[i]==0)
{
ll kk=1;
while(h%prime[i]==0)
{
h/=prime[i];
kk*=prime[i];
}
v.push_back(kk);
}
}
if(h) v.push_back(h);
int len=v.size();
for(i=0;i<(1<<len);++i) // 枚举所有子集
{
ll tmp=1;
for(j=0;(1<<j)<=i;++j)
{
if(i&(1<<j))
tmp*=v[j];
}
ll A=tmp,B=2*n/tmp;
answer=min(answer,min(solve(A,B),solve(B,A)));
}
printf("%lld\n",answer);
v.clear();
}
return 0;
}

  

Comet OJ - Contest #10 鱼跃龙门 exgcd+推导的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)

    来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...

  7. Comet OJ - Contest #5

    Comet OJ - Contest #5 总有一天,我会拿掉给\(dyj\)的小裙子的. A 显然 \(ans = min(cnt_1/3,cnt_4/2,cnt5)\) B 我们可以感性理解一下, ...

  8. Comet OJ Contest #13 D

    Comet OJ Contest #13 D \(\displaystyle \sum_{i=0}^{\left\lfloor\frac{n}{2}\right\rfloor} a^{i} b^{n- ...

  9. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

随机推荐

  1. dash shell 的一些总结

    最近写个一些dash shell 相关的代码,中间遇到了一些坑以及需要注意的地方,记录一下 1 参数 numberofargmuments(){ echo "The number of ar ...

  2. [Jenkins]初次访问Jenkins,输入密码后,页面卡在空白界面一直未加载出内容_解决方案

    问题描述 安装Jenkins,初次访问Jenkins(http://localhost:8002,端口号根据各自设置而不同,本例是8002),输入Jenkins初始化的管理密码之后,浏览器中一直卡在空 ...

  3. shiro学习(一)

    基础依赖: shiro-core,junit(因为在单元测试中) test.class public class AuthenticationTest { SimpleAccountRealm rea ...

  4. linux mint 安装微信

    安装nodejs 到nodejs官网下载node js压缩包,然后解压到自己设置的目录.我的解压路径是 /home/congwiny/Develop/SoftWare/node-v6.10.3-lin ...

  5. springcloud(十二)-springcloud-config统一管理微服务配置

    1.为什么要统一管理微服务配置 对于传统的单体应用,常使用配置文件管理所有配置.例如一个SpringBoot开发的单体应用,可将配置内容放在application.yml文件中.如果需要切换环境,可设 ...

  6. haproxy + keepalived + mycat 高可用与负载均衡集群配置 centos7

    架构如上,但是其实keepalived.haproxy.Mycat都可以多台(比如keepalived.haproxy.Mycat各3台,3台keepalived抢占vip,然后抢到vip的hapro ...

  7. VSCode主题自定义(附详细注释及本人主题分享)

    先来一张本人自己配置的主题截图,喜欢的拿去用: 下面说说怎么自定义主题: 1.     Ctrl + ,(Ctrl键 + 逗号键):打开设置,也可以依次点击编辑器左上角 => 文件 => ...

  8. IntelliJ IDEA(Community版本)本地模式的下载、安装及其使用

    对于初学者来说可以先使用免费的社区版本练练手. ideaIC-2017.3.5——>社区版 ideaIU-2017.3.5——>旗舰版 一.IntelliJ IDEA(Community版 ...

  9. shell中sed的简单使用

    sed命令行格式为:         sed [-nefri]  ‘command’  输入文本/文件        常用选项:        -n∶取消默认的输出,使用安静(silent)模式.在一 ...

  10. Webmin代码执行漏洞复现

    0x00 前言之前由于hw,没得时间分析.这个webmin相信大家很多次都在内网扫到过.也是内网拿机器得分的一环. 0x01影响版本Webmin<=1.920 0x02 环境搭建 建议大家以后用 ...