CometOJ-[Contest #10]鱼跃龙门【exgcd】
正题
题目链接:https://cometoj.com/problem/1479
题目大意
给出\(n\)求一个最小的\(x(x>0)\)满足
\]
\(1\leq n\leq 10^{12},1\leq T\leq 100\)
解题思路
转成等比数列求和就是
\]
从里面获得一下信息,考虑枚举\(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】的更多相关文章
- Comet OJ - Contest #10 鱼跃龙门 exgcd+推导
考试的时候推出来了,但是忘了 $exgcd$ 咋求,成功爆蛋~ 这里给出一个求最小正整数解的模板: ll solve(ll A,ll B,ll C) { ll x,y,g,b,ans; gcd = e ...
- 2016 Multi-University Training Contest 10
solved 7/11 2016 Multi-University Training Contest 10 题解链接 分类讨论 1001 Median(BH) 题意: 有长度为n排好序的序列,给两段子 ...
- hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)
CRB and Tree Time Limit: 8000/4000 MS (J ...
- 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 ...
- 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 ...
- [二分,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 ...
- 2015 Multi-University Training Contest 10(9/11)
2015 Multi-University Training Contest 10 5406 CRB and Apple 1.排序之后费用流 spfa用stack才能过 //#pragma GCC o ...
- 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 ...
随机推荐
- 查询liunx上磁盘占用情况
查询挂载盘磁盘情况 df -h 查询指定目录下的文件夹内存占用情况 du -hs /*
- Asp.NetCore 中Aop的应用
前言 其实好多项目中,做一些数据拦截.数据缓存都有Aop的概念,只是实现方式不一样:之前大家可能都会利用过滤器来实现Aop的功能,如果是Asp.NetCore的话,也可能会使用中间件: 而这种实现方式 ...
- SpringCloud之Config
1.背景 在前的学习中,我们几乎解决了springCloud的所有常规应用,但是大家有没有想过这样一个问题: 是使用微服务后,有非常多的application.yml文件,每个模块都有一个,实际开发中 ...
- p命名空间和c命名空间
4 p命名空间和c命名空间在通过构造方法或set方法给bean注入关联项时通常是通过constructor-arg元素和property元素来定义的.在有了p命名空间和c命名空间时我们可以简单的把它们 ...
- Float浮动(慕课网学习笔记)
float浮动 属性:值 意义 float:left 左浮动 float:right 右浮动 float:none 不浮动 float:inherit 继承父元素浮动属性,若父元素没有浮动属性则失效 ...
- mybatis根据表逆向自动化生成代码(自动生成实体类、mapper文件、mapper.xml文件)
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- Zookeeper 序列化机制
一.到底在哪些地方需要使用序列化技术呢? 二.Zookeeper(分布式协调服务组件+存储系统) Java 序列化机制 Hadoop序列化机制 Zookeeper序列化机制 一.到底在哪些地方需要使用 ...
- 技术调研,IDEA 插件怎么开发「脚手架、低代码可视化编排、接口生成测试」?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 不踩些坑,根本不是成熟的码农! 你觉得肯德基全家桶是什么?一家人一起吃的桶吗,就那么 ...
- go语言内存对齐
内存对齐 为保证程序顺利高效的运行,编译器会把各种类型的数据安排到合适的地址并占用合适的长度,这就是内存对齐 每种类型的对齐值就是他的内存边界 64位 类型 对齐边界 (对齐值) int8 1byte ...
- [leetcode]1109. 航班预订统计(击败100%用户算法-差分数组的详解)
执行用时2ms,击败100%用户 内存消耗52.1MB,击败91%用户 这也是我第一次用差分数组,之前从来没有碰到过,利用差分数组就是利用了差分数组在某一区间内同时加减情况,只会改变最左边和最右边+1 ...