Comet OJ - Contest #10 鱼跃龙门 exgcd+推导
考试的时候推出来了,但是忘了 $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$ 直接求,但是有一些细节需要注意:
- $A,B$ 都需要大于 $0$.
- 我们想求 $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+推导的更多相关文章
- Comet OJ - Contest #10 C.鱼跃龙门
传送门 题意: 求最小的\(x\),满足\(\frac{x(x+1)}{2}\% n=0,n\leq 10^{12}\). 多组数据,\(T\leq 100\). 思路: 直接考虑模运算似乎涉及到二次 ...
- Comet OJ - Contest #10 C题 鱼跃龙门
###题目链接### 题目大意: 给你一个 x ,让你求出最小的正整数 n 使得 n * (n + 1) / 2 % x == 0 ,即 n * (n + 1) % 2x == 0 . 分析: 1 ...
- Comet OJ - Contest #10 B题 沉鱼落雁
###题目链接### 题目大意:有 n 个正整数,每个正整数代表一个成语,正整数一样则成语相同.同一个正整数最多只会出现 3 次. 求一种排列,使得这个排列中,相同成语的间隔最小值最大,输出这个最小间 ...
- 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\) 替换成 ...
- Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)
来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...
- Comet OJ - Contest #5
Comet OJ - Contest #5 总有一天,我会拿掉给\(dyj\)的小裙子的. A 显然 \(ans = min(cnt_1/3,cnt_4/2,cnt5)\) B 我们可以感性理解一下, ...
- 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- ...
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
随机推荐
- tp5定时任务
第一步: a.App/模块/ 下创建command文件夹 b.我这边是创建在crontab模块里面,在command文件夹下创建一个Task.php文件(具体名字自己根据需求定) c.复制下面的代码到 ...
- 版本管理工具svn(转)
这种操作类的文章就不自己再写了,感觉浪费时间. 找了一个写的不错的文章转载. 文中流程有些变动,但是问题不大,可能是版本原因. SVN服务器的本地搭建和使用 http://www.2cto.com/o ...
- APOC官网触发器示例执行后Web页面一直转圈
apoc使用触发器:如apoc官网指导 CREATE (d:Person {name:'Daniel'}) CREATE (l:Person {name:'Mary'}) CREATE (t:Pers ...
- 怎样将当前节点从DOM树中移除
1. 获取到当前节点. 2. 获取到当前节点的父节点. 3. 使用 Node.prototype.removeChild() 移除当前节点. <!DOCTYPE html> <htm ...
- Power BI 行级别安全性 (RLS)
在 Power BI Desktop 中定义角色和规则 你可以在 Power BI Desktop 中定义角色和规则. 发布到 Power BI 时,它还会发布角色定义. 若要定义安全角色,请执行以下 ...
- JS基础_属性名和属性值
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 通俗易懂的axios
get的两种请求: methods:{ //axios.get的发送参数有两种,两个ajax请求函数都可实现 sendGetByStr(){ //1.get通过直接发字符串拼接 axios.get(` ...
- 附件上传vue组件封装(一)
//父页面部分 <attachment @newFileList="newFileList" :operationType="operationType" ...
- vim 去掉自动注释和自动回车
取消 :set paste 恢复 :set paste!
- 关于PXELINUX的一些重要描述摘录
以下资源都来自官方文档,原文摘录 PXELINUX is a SYSLINUX derivative, for booting Linux off a network server, using a ...