初等数论
sunyutian1998
这个作者很懒,什么都没留下…
展开
-
Sumdiv POJ - 1845
点击打开链接对于 有 所以我们只需要求出a的所有素因子 然后将幂次乘b 搞几个二分幂累乘即可但是注意 如果用等比公式的话需要求逆元 会爆longlong#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define ll lo...原创 2018-05-11 09:38:21 · 156 阅读 · 0 评论 -
Diophantus of Alexandria POJ - 2917
http://poj.org/problem?id=2917给一个整数n 问有多少对(x,y)满足1/x+1/y=1/n且x<=y训练时听队友说就看n^2有多少因数 自己做还是没啥头绪。。其实就是一步转换 x和y肯定都是大于n的 就设x=n+a y=n+b(a<=b) 代入上述公式后得a*b=n^2 从而得到上述结论求一个数有多少因数 一般就是素因子分解一下 n=(a1...原创 2019-04-09 20:42:39 · 146 阅读 · 0 评论 -
青蛙的约会 POJ - 1061
http://poj.org/problem?id=1061两只青蛙是同时跳的 如果两只青蛙的步子一样大 那永远也无法相遇否则 考虑用拓展欧几里得求(a*x)%b=c的最小非负整数解 将步子之差(m-n)作为a 总长度l作为b 初始距离y-x作为c(注意不能是(x-y))即可#include <cstdio>#include <cstring>...原创 2019-05-05 20:23:46 · 170 阅读 · 0 评论 -
C Looooops POJ - 2115
http://poj.org/problem?id=2115拓展欧几里德裸题 以cc为a (1<<k)为b(bb-aa)为c 求(a*x)%b=c得最小非负整数解即可#include <cstdio>#include <cstring>#include <algorithm>using namespace std;ty...原创 2019-05-05 21:50:28 · 134 阅读 · 0 评论 -
The Balance POJ - 2142
http://poj.org/problem?id=2142先求ax+by=gcd(a,b)的一组特解(x0 y0) 而后的ax+by=c的通解(x0*(c/gcd)+t*(b/gcd) y0*(c/gcd)-t*(a/gcd))题目要求的是|x|+|y|最小 其次|a*x|+|b*y|最小的解看别人博客知道 当c>0时 若a>b则x非负 反之则y非负 这样只要保证a>...原创 2019-05-06 14:07:47 · 146 阅读 · 0 评论 -
Bi-shoe and Phi-shoe LightOJ - 1370LightOJ
http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1370两个质数之间得合数得欧拉函数小于较小的质数 (暂时还没想出证明)这样每个合数都可以被一个比它小的素数替代 所以只考虑素数即可 对每个给定的数 找一个欧拉函数值大于该数的数 就相当于找第一个大于该数的素数#include <cst...原创 2019-05-06 16:04:37 · 146 阅读 · 0 评论 -
Sum HDU - 4704
http://acm.hdu.edu.cn/showproblem.php?pid=4704题中定义的整数分解 对于n有2^(n-1)种方案 打个表就有规律可是幂次太大 这时要用到欧拉定理 即若a与n互质 则a^f(n)%n=1 (f为欧拉函数)现在要求(2^n)%mod 因为mod=1e9+7为一个素数 所以f(mod)=mod-1 得2^(mod-1)%mod=1 这样就找到了循环...原创 2019-05-06 18:23:27 · 156 阅读 · 0 评论 -
Visible Lattice Points POJ - 3090
http://poj.org/problem?id=3090预处理答案 ans[i]比ans[i-1]多出来的部分 就是2*f(i) 也就是看多出来的一圈点中有多少点与(0,0)的横纵坐标之差互质 画画图就出来了#include <cstdio>#include <cstring>#include <algorithm>using name...原创 2019-05-07 10:25:25 · 145 阅读 · 0 评论 -
GCD and LCM HDU - 4497
http://acm.hdu.edu.cn/showproblem.php?pid=4497将gcd与lcm素因子分解 如果gcd某个素因子的幂次pi大于lcm对应素因子的幂次qi 那就是凑不出 因为gcd肯定是lcm因子如果pi<=qi xyz三个数中必有一个幂次为pi 必有一个为qi 因为gcd就是取得三者最小 lcm取最大 只剩一个数的幂次ti可变 当ti=pi或ti=qi时 ...原创 2019-05-07 18:38:15 · 157 阅读 · 0 评论 -
可除图的最大团 51Nod - 1524
https://www.51nod.com/Challenge/Problem.html#!#problemId=1524题意可以转换为 用给定的几个数构成一个哈斯图 求最长链类似素数筛地跑一遍 复杂度n*logn下面两种写法 大同小异 都要加读入优化才能过 #include <bits/stdc++.h>using namespace std;const i...原创 2019-02-24 13:23:29 · 166 阅读 · 0 评论 -
扔球 51Nod - 1262
https://www.51nod.com/Challenge/Problem.html#!#problemId=1262在圆上反弹n次并回到原点 那就是用(n+1)个点将圆(n+1)等分 并且这(n+1)个点每个都要走一遍且仅一遍 那每次间隔点的数量必须和(n+1)互质 不然走不够(n+1)次 求一下欧拉函数即可 题目上说的什么反向走一次完全是干扰信息 #include <...原创 2018-12-12 15:43:19 · 177 阅读 · 0 评论 -
Soldier and Number Game CodeForces - 546D
点击打开链接给一个数(a!/b!) 每次除一个数 问最多能除多少次很容易想到算数基本定理 n=(p1^a1)*(p1^ak)*......*(pk^ak) 其中pi是n的素因子 而ai是对应幂次 素因子已经无法再继续分下去 所以按照这个公式来一步一步分解n是次数最多的先要找出这些素因子 既然是素数那就素数筛预处理 同时如果筛到素因子 就看它的倍数是它的几次幂 这样在筛素数时就把每一个数...原创 2018-05-10 21:50:13 · 173 阅读 · 0 评论 -
GCD HDU - 2588
点击打开链接对于一个数n 在比它小的数中 除了他的因子 其他数和n的gcd均为1 所有符合题意的数x肯定是n的某个因子的倍数所以只用看n的所有因子 假设有一个n的因子p大于m 就看(n/p)的欧拉函数值是多少 累加至于为什么要求(n/p)的欧拉函数 这是为了解决”冲突“ 对于n的因子p和一个与(n/p)不互素的k k*p就会变成n的其他因子或其他因子的倍数 这里需要仔细想想#i...原创 2018-05-10 15:35:37 · 234 阅读 · 0 评论 -
Line CodeForces - 7C
点击打开链接欧几里得算法参考https://www.cnblogs.com/hadilo/p/5914302.html扩展欧几里得就是 求方程ax+by=c的最小整数解1. c%gcd(a,b)!=0 则方程无解2. c%gcd(a,b)==0 则有a*x+b*y==gcd(a,b)成立因为gcd(a,b)==gcd(b,a%b) 所以b*x+(a%b)*y=...原创 2017-11-27 21:17:04 · 341 阅读 · 0 评论 -
Taxes CodeForces - 735D
点击打开链接一道数论题 不会..但是学到了哥德巴赫猜想这个东西对于一个合数 如果是偶数就可以分解成两个质数之和 如果是奇数就看拿出一个2后是不是质数 是的话就为2 不是的话就为3 #include <bits/stdc++.h>using namespace std;#define ll long longi...原创 2017-10-06 20:13:16 · 268 阅读 · 0 评论 -
Dima and Lisa CodeForces - 584D
http://codeforces.com/contest/584/problem/D歌德巴赫猜想:任一大于2的偶数都可写成两个质数之和 任一大于7的奇数都可写成三个素数之和小常识:10^9范围内 相邻两个素数差不超过300#include <bits/stdc++.h>using namespace std;bool judge(int n){ int ...原创 2018-09-07 22:34:30 · 278 阅读 · 0 评论 -
区间LCM 51Nod - 1434
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1434想用一个数可以整除1到n的所有数 肯定要考虑最难搞的那几个数 也就是素因子分解后幂次最大的 所以就看每个素数在n内的最高次幂是多少 只要满足这些数就足够了 因为要在大于n的范围内找一个数 所以就看这些数下一次出现在什么地方 乘2就好 因为要满足所有 取最大值...原创 2018-10-06 09:34:10 · 228 阅读 · 0 评论 -
Vasya and Petya's Game CodeForces - 577C
http://codeforces.com/problemset/problem/577/C问序列中最少含几个数 使得1-n的每一个数都能用序列中的几个数相乘得到把每个数都素因子分解为(2^p1)*(3^p2)*(5^p3)...这种形式 把2^1...2^p1等都扔数组里去个重就好 #include <bits/stdc++.h>using namespace s...原创 2018-10-25 12:35:12 · 195 阅读 · 0 评论 -
A Partial Order Relation UVALive - 8270
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=6292给一个数 问起gcd/lcm的哈斯图有多少条边发现哈斯图每个点上的数有几个素因子 就向下连几条边 然后素因子分解一下就完事了 #inclu...原创 2018-11-16 14:44:43 · 267 阅读 · 0 评论 -
最大公约数之和 51Nod - 1040
https://www.51nod.com/Challenge/Problem.html#!#problemId=1040求所有gcd之和 就看n的每个因子会做出多少贡献即可 即对n的某个因子x 有贡献的i满足gcd(n,i)=x 从而推出gcd(n/x,i/x)=1这样问题就转换为 对每个因子x求n/x的欧拉函数值了 #include <bits/stdc++.h>...原创 2018-11-26 19:10:36 · 197 阅读 · 0 评论 -
Trailing Loves (or L'oeufs?) CodeForces - 1114C
http://codeforces.com/problemset/problem/1114/C将b素因子拆分 形如b=(a1^p1)*(a2^p2)*...*(ak^pk)凑出一个尾0 就需要p1个a1p2个a2...pk个ak 然后看n能提供多少 取最小即可#include <bits/stdc++.h>using namespace std;typedef...原创 2019-05-07 19:13:32 · 136 阅读 · 0 评论