题目链接

problem

实际上就是对于给定的\(n\)求一个最小的\(x\)满足\(\frac{x(x+1)}{2}=kn(k\in N^*)\)。

solution

对上面的式子稍微变形可得\(x(x+1)=2kn\)。因为\(x\)与\((x+1)\)互质,所以将\(n\)质因数分解后,同种质因子肯定都位于\(x\)或\((x+1)\)中。\(10^{12}\)以内的整数质因数分解后种类不超过\(13\)种,所以可以暴力枚举每种质因子属于\(x\)还是\(x+1\)。

然后分别得到\(a\)和\(b\)。下面要使得\(bx=ay+1\)。扩展欧几里得求解即可。

PS

本题时限\(0.5s\),每次询问都\(\sqrt{n}\)质因数分解是会\(TLE\)的。所以先预处理质数。然后进行质因数分解。

code

  1. //@Author: wxyww
  2. #include<cstdio>
  3. #include<iostream>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. #include<queue>
  8. #include<vector>
  9. #include<ctime>
  10. #include<cmath>
  11. #include<map>
  12. #include<string>
  13. using namespace std;
  14. typedef long long ll;
  15. const int N = 5000010;
  16. ll read() {
  17. ll x = 0,f = 1; char c = getchar();
  18. while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}
  19. while(c >= '0' && c <= '9') {x = x * 10 + c - '0',c = getchar();}
  20. return x * f;
  21. }
  22. ll dis[N];
  23. int prmjs,vis[N];
  24. ll n;
  25. ll js,cnt[15];
  26. void fj(ll x) {
  27. for(int i = 1;dis[i] * dis[i] <= x;++i) {
  28. if(x % dis[i] == 0) {
  29. cnt[++js] *= dis[i];
  30. x /= dis[i];
  31. }
  32. while(x % dis[i] == 0) x /= dis[i],cnt[js] *= dis[i];
  33. }
  34. if(x != 1) cnt[++js] = x;
  35. }
  36. ll ans;
  37. ll exgcd(ll a,ll b,ll &x,ll &y) {
  38. if(b == 0) {
  39. x = 1,y = 0;return a;
  40. }
  41. ll tmp = exgcd(b,a % b,x,y);
  42. ll t = x;
  43. x = y; y = t - a / b * y;
  44. return tmp;
  45. }
  46. int main() {
  47. int T = read();
  48. for(int i = 2;i <= 2000000;++i) {
  49. if(!vis[i]) dis[++prmjs] = i;
  50. for(int j = 1;j <= prmjs && 1ll * dis[j] * i <= 1000000;++j) {
  51. vis[dis[j] * i] = 1;
  52. if(i % dis[j] == 0) break;
  53. }
  54. }
  55. while(T--) {
  56. n = read() * 2;
  57. js = 0;
  58. for(int i = 1;i <= 14;++i) cnt[i] = 1;
  59. fj(n);
  60. ans = n * 2;
  61. ll m = 1 << js;
  62. for(int i = 0;i < m;++i) {
  63. ll now = 1;
  64. for(int j = 0;j < js;++j) if(i >> j & 1) now *= cnt[j + 1];
  65. ll x,y;
  66. exgcd(now,n / now,x,y);
  67. y = y % now;
  68. if(y >= 0) y -= now;
  69. ans = min(ans,n / now * -y);
  70. }
  71. printf("%lld\n",ans);
  72. }
  73. return 0;
  74. }

CometOJ10C 鱼跃龙门的更多相关文章

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

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

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

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

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

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

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

    正题 题目链接:https://cometoj.com/problem/1479 题目大意 给出\(n\)求一个最小的\(x(x>0)\)满足 \[\left(\sum_{i=1}^xi\rig ...

  5. 代码规范之争——[个人Week2作业]

    这四个问题均是出自 http://goodmath.scientopia.org/2011/07/14/stuff-everyone-should-do-part-2-coding-standards ...

  6. [Week2 作业] 代码规范之争

    这四个问题均是出自 http://goodmath.scientopia.org/2011/07/14/stuff-everyone-should-do-part-2-coding-standards ...

  7. Kernighan《UNIX 传奇:历史与回忆》杂感

    Brian W. Kernighan 是一个伟大的技术作家,我买了他写的几乎所有书.他近些年的书我买的是 Kindle 电子版,不占地方. 以下是我手上保存的纸版书: Kernighan 的书大多与别 ...

随机推荐

  1. python面向对象-1

    1.面向对象的思想优点 优点: 简化代码 ,构建公共模板 ,扩展性强 思想: 类作为模板 ,对象通过模板实例化对象 ,对象去做事 ,抽象将显示存在的事物使用代码体现 2.三大特性 封装(狭义) : 对 ...

  2. jsf中的按钮加弹框的两种形式

    第一种: <p:commandButton value="一键移除" action="#{ProjectPackageManageBackingBean.remov ...

  3. Java学习笔记-Java文件操作流

     day03 输入输出流:读入写出  节点流:   有明确的来源和去向   往往对字节操作 节点流又叫低级流.字节流   处理流:  没有明确的来源和去向  往往对低级流或其他高级流进行操作,不能独立 ...

  4. canvas在vue中的应用

    使用cavas可以绘制各种图表.生成二维码.制作H5小游戏. 生命周期 canvas应该在mounted的生命周期中初始化,在updated中是无效的. export default { mounte ...

  5. CentOS连接Wifi

    原文地址:https://blog.csdn.net/zhuangm_888/article/details/53868451   1. 查看是否需要安装固件 大多无线网卡还需要固件.内核一般会自动探 ...

  6. C# Excel 读取导入数据库

    使用Aspose.Cells组件. 表格第一行为表头合并,第二行为数据名称,从第三行开始数据. if (xtraOpenFileDialog1.ShowDialog() == DialogResult ...

  7. leetcode-二叉树

    树以及常用的算法 树的概念 树(Tree)的基本概念树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构.没有结点的树称为空(null或empty)树.一棵非空的树包括一个根结点 ...

  8. C# 使用NAudio合并mp3、wav音频文件

    1.什么是wav格式    WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windo ...

  9. jupyter notebook改变行间图片大小

    jupyter notebook使用起来代码效果很直接,这是我最喜欢的一点,但是主题单一,后来改了一下主题.也可以接受了,但是还有一个问题是显示图片太小我们可以用两个方法来改变它. 一.可以通过rcP ...

  10. Centos 7 下安装 Jenkins

    Jenkins介绍 Jenkins是一个开源的支持自动化构建.部署等任务的平台.基本上可以说是持续集成(CI).持续发布(CD)不可或缺的工具. 安装Java环境 CentOS 7 安装 JAVA环境 ...