Comet OJ - Contest #10鱼跃龙门

news/2024/11/15 8:16:54/

题目来源:https://www.cometoj.com/contest/65/problem/C?problem_id=3684

题意:求k*(k+1)/2%n==0的最小k。

由k与k+1可以想到设置未知数:k+1=px,k=qy,可列得方程:px-qy=1,由此扩展欧几里得方程,

原方程为px*qy/2*n==(一个正整数),考虑到时间复杂度的问题,可以将x,y先拆分为2*n的质因数 ,唯一分解定律拆分,最终化成质因子次幂的形式进行组合。

即x*y==2*n并且px-qy==1.

完了之后,需要对所有产生的质因数扫描一遍,比方说:有K个,那么x=1,2的时候则为C\binom{1}{n},C\binom{2}{n}依次类推,总情况数即他们相加的总和,直接二项式定理即为2的K次幂种情况,由2*3*5*7*11...找前十几个质数的乘积可以发现1e12不会超过12项,但是所有情况都需要计算一遍,用二进制搜索表示,1表示这一项质因数我乘在x里面。用二进制搜索的方式表示所有情况,判断一下min即可。

扩展欧几里德log(n);

时间复杂度为预处理加内循环O(MAX+T*( 2^K*log n))

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<queue>
#define MAX_len 50100*4
using namespace std;
typedef long long ll;
const int MAX=1e6+5;
int prime[MAX];
bool vis[MAX];
int tot=0;
void init()
{memset(vis,false,sizeof(vis));ll i,j;for(i=2;i<=MAX;i++){if(!vis[i]){vis[i]=true;prime[tot++]=i;for(j=i*i;j<=MAX;j+=i){vis[j]=true;}}}
}
ll exgcd(ll a,ll b,ll &x,ll &y)
{if(!b){x=1;y=0;return a;}ll g=exgcd(b,a%b,x,y);ll t1=x;x=y;y=t1-a/b*y;return g;
}
ll hh[MAX];
int main()
{init();int T;scanf("%d",&T);while(T--){int i,j;ll n;scanf("%lld",&n);n*=2;ll orz=n;int sum=0;for(i=0;i<tot&&prime[i]<=sqrt(n);i++){if(n%prime[i]==0){hh[++sum]=1;while(n%prime[i]==0){hh[sum]*=prime[i];n/=prime[i];}}}if(n!=1){hh[++sum]=n;}ll res=orz-1;for(i=1;i<(1<<sum);i++){ll x=1;for(j=0;j<sum;j++){if((1<<j)&i)x=x*hh[j+1];}ll y=orz/x;ll p,q;ll r=exgcd(x,-y,p,q);q/=r;x=abs(x/r);q%=x;if(q<=0)q+=x;res=min(res,q*(y));}printf("%lld\n",res);}	return 0;
}

 


http://www.ppmy.cn/news/450710.html

相关文章

CometOJ-[Contest #10]鱼跃龙门【exgcd】

正题 题目链接:https://cometoj.com/problem/1479 题目大意 给出 n n n求一个最小的 x ( x > 0 ) x(x>0) x(x>0)满足 ( ∑ i 1 x i ) ≡ 0 ( m o d n ) \left(\sum_{i1}^xi\right)\equiv 0(\mod n) (i1∑x​i)≡0(modn) 1 ≤ n ≤ 1 0 12 , 1 ≤ T ≤ 100 1\leq n…

【gmoj】 【扩欧】 鱼跃龙门

【gmoj】 【扩欧】 鱼跃龙门 题目 解题思路 题意 就是求1~x的和能整除n 高斯求和公式是x&#xff08;x1&#xff09;/2 也就是说x&#xff08;x1&#xff09;/2n 移项x(x1)2n 设apx1&#xff0c;bqx ap-bqgcd(a,b) 要求出最小的bq&#xff08;x&#xff09; 已知b&#xff0…

JDK 内置图形界面工具:海阔凭鱼跃,天高任鸟飞

GUI 图形界面工具,主要是 3 款:JConsole、JVisualVM、JMC。其实这三个产品可以说是 3 代不同的 JVM 分析工具。 这三个工具都支持我们分析本地 JVM 进程,或者通过 JMX 等方式连接到远程 JVM 进程。当然,图形界面工具的版本号和目标 JVM 不能差别太大,否则可能会报错。 下…

【毕业季】致毕业生的一句话:天高任鸟飞,海阔凭鱼跃

活动地址&#xff1a;毕业季进击的技术er 各位小伙伴们大家好&#xff0c;我是小曾哥&#xff0c;今天文章的主题没有技术干货&#xff0c;只有一个在校生的故事。 欢迎大家在评论区说出自己的故事&#xff0c;我先给大家抛个砖&#xff0c;希望能够引出大家的故事&#xff01;…

海阔凭鱼跃天高任鸟飞

独角兽 独角兽 独角兽 WWW.CUME.CC

鱼跃龙门——扩展欧几里得与唯一分解定理的巧妙运用

题目描述 给定一个正整数 n n n&#xff0c;一共有 n n n 座龙门&#xff0c;跳过第 j ( j < n ) j (j < n) j(j<n) 座龙门将会到达第 j 1 j1 j1 座龙门前&#xff0c;特殊地&#xff0c;跳过第 n n n 座龙门后将会到达第 1 1 1 座龙门前。 胖头鱼一开始在第一…

GMOJ7177 鱼跃龙门题解

GMOJ 7177 鱼跃龙门 题解 题面 显然是求最小的x 使得 x ( x 1 ) 2 ≡ 0 ( m o d n ) \frac{x \times(x 1)}{2} \equiv 0 (mod\; n) 2x(x1)​≡0(modn) 即 x ( x 1 ) ≡ 0 ( m o d 2 n ) x \times (x 1) \equiv0(mod\;2n) x(x1)≡0(mod2n) 令 d g c d ( x , 2 n ) , x …

CometOJ10C 鱼跃龙门

题目链接 problem 实际上就是对于给定的\(n\)求一个最小的\(x\)满足\(\frac{x(x1)}{2}kn(k\in N^*)\)。 solution 对上面的式子稍微变形可得\(x(x1)2kn\)。因为\(x\)与\((x1)\)互质&#xff0c;所以将\(n\)质因数分解后&#xff0c;同种质因子肯定都位于\(x\)或\((x1)\)中。\(1…