数论
# 数论
快乐撸代码
一个今天胜过两个明天
展开
-
【求最大公约数详解】更相减损术和辗转相除法
更相减损术介绍 更相减损术是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合步骤任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。第1步中约掉的若干个2的积与第2步中其中一个等数的乘积就是所求的最大公约数解释 首先 我们设 a>b,gcd(a,b) = ans ,【用2约简】假设有 n 个 2 ,那么原创 2021-04-16 17:41:37 · 2090 阅读 · 0 评论 -
用唯一分解定理视角看待模运算
用唯一分解定理视角看待模运算问题背景给定两个数 p 和 q ,若 p % q == 0 ,求 满足条件 ( p%x==0 && x% q !=0 )x的最大值.首先来看一组例子6 % 4 != 06 % 2 == 06 分解质因数为: 21 ×3 14 分解质因数为: 222 分解质因数为: 21根据 6、4、2 的素因子分解式子的每一项的幂次和模运算结合着看,有没有发现:6%4!=0 的原因是 6 的 21小于 4 的 2 2 ,而模运算结果为 0原创 2020-11-03 13:50:42 · 194 阅读 · 0 评论 -
HDU-6273 Master of GCD (素因子分解定理应用)
HDU-6273 Master of GCD (素因子分解定理应用)题意:给 T 组数据每组数据第一行输入 n 和 m ,表示对一个长度为 n ,初始值值为 1 的数组,进行 m 次 操作每次操作输入 L ,R ,op 三个数,op 只能为 2 或 3,表示 L 到 R 区间的每个数字 a[i] = a[i] * op ,i=2,3求 m 次操作后,这 n 个数的最大公约数是多少思路:要想求 n 个数的最大公约数,可以将这 n 个数进行素因子分解,然后找出这 n 个分解式子中原创 2020-10-24 10:41:22 · 252 阅读 · 0 评论 -
素数筛时间空间优化
素数筛时间空间优化时间优化普通素数筛原理 :素数的倍数一定不是素数;据此筛选素数。void work1(){ int cnt=0; for(int i=2; i<=n; i++) { if(!flag[i]) { prime[cnt++]=i; for(int j=i*2; j<=n; j+=i) flag[j]=1; } }原创 2020-05-14 14:36:48 · 248 阅读 · 0 评论 -
HDU - 5776 同余(思维)
同余(思维)题意:输入 n m, 下一行输入 n 个数 ;问:在该序列中是否存在连续的子序列的和可以被 m 整除?思路:计算前缀和,并且每个前缀和对 m 取余,记录结果。若存在这样一种序列,那么取余的结果必定出现第二次,也就是说,当前取余结果若出现过,那么在出现过的那个位置到现在这个位置的区间和为 m 的整数倍。【 (d+m ) %k=d 】 ==【 d%k =d 】撸代码:#include<stdio.h>#include<string.h>int m原创 2020-05-10 20:32:31 · 251 阅读 · 0 评论 -
POJ--2299 Ultra-QuickSort 归并排序——求逆序数
@归并排序求逆序数题意给一个序列求它的逆序数归并排序给一个序列 9 1 0 5 4,进行归并排序:(从小到大)下标01234数值91054单个元素为一组,两两合并为有序序列:下标0 12 34数值1 ...原创 2020-04-23 15:29:49 · 210 阅读 · 0 评论 -
POJ 3070 Fibonacci矩阵快速幂 --斐波那契
题意:求出斐波那契数列的第n项的后四位数字思路:f[n]=f[n-1]+f[n-2]递推可得二阶行列式原创 2019-09-29 19:46:45 · 242 阅读 · 1 评论 -
HDU - 1999 不可摸数,快速求因子和
题意:定义s[m]为m内的因子的和,给定一个n,判断是否有s[m]==n,若没有,则是不可摸数。思路:首先要打表求出s[m]的值,标记这些出现过的值。打表求因子和: for(int i=1;i<=500000;i++) for(int j=i*2;j<1000000;j+=i) sum[j]+=i;//找到j的因子和,j的因子是i...原创 2019-09-21 16:54:17 · 221 阅读 · 0 评论 -
LightOJ - 1341 Aladdin and the Flying Carpet 唯一分解定理LightOJ 1220Mysterious Bacteria
题意:ttt 组数据,第一个给定飞毯的面积为 sss,第二个是毯子的最短的边的长度大于等于这个数,毯子是矩形但不是正方形。思路:求出 sss 的所有因子,因为不可能是矩形,所以可以除以 222,最后暴力求出最短边长以内的因子,相减得出答案。想要求出s以内的因子数量,就用到了唯一分解定理,先求素数想要求出s以内的因子数量,就用到了唯一分解定理,先求素数想要求出s以内的因子数量,就用到了唯一分...原创 2019-08-10 08:49:28 · 208 阅读 · 0 评论 -
LightOj 1197 Help Hanzo 区间素数筛
题意:给定一个区间a,b,a-b>=100000,1<=a<=b<=231,求出给定a,b区间内的素数的个数区间素数筛(a+i-1)/ ii向上取整,当a为 i 的整数倍时,直接从a开始标记,当a不是 i 的整数倍时,得出 i 的整数倍且大于a,如果a小于等于 i 时,从2i开始标记 for(ll i=2;i*i<b;++i) { ...原创 2019-08-10 10:23:59 · 157 阅读 · 0 评论 -
UVA - 10200 Prime Time 关于 double类型 卡精度
题意:给定一个区间,a到b, n在区间内,有一个计算素数的公式,n*n+n+41,将n带进去可以得出一个数字。但是这个公式可能不准确,求出这个公式在这个区间内的准确率。直接模拟就好了,不过要 注意 :直接对1到10000的数据打一个表,要不然会超时,在卡精度的时候加上一个1e-6或者1e-8,这东西有点说不清为什么,先记着,就像浮点型数据不能直接比较大小一样,比如: 定义一个浮点型的a和b,...原创 2019-08-11 17:53:53 · 257 阅读 · 0 评论 -
POJ - 1061 青蛙的约会 扩展欧几里得 + (贝祖公式)最小正整数解
题意:青蛙 A 和 青蛙 B ,在同一纬度按照相同方向跳跃相同步数,A的起点为X ,每一步距离为m,B的起点为Y,每一步距离为 n,一圈的长度为L,求最小跳跃步数。思路:一开始按照追击问题来写,结果发现会求出来小数,而且按照追击问题写的话,一圈就能相遇,但是!青蛙的步数可没有小数,而且青蛙是跳跃的,显然不能在空中相遇吧。所以咧,先列出一个追击的式子 ,设步数为 t ,整数为K(转了K圈以后...原创 2019-08-13 17:31:52 · 271 阅读 · 0 评论 -
UVA - 11426 欧拉函数(欧拉函数表)
题意:给一个数 N ,求 N 范围内所有任意两个数的最大公约数的和。思路:f 数组存的是第 n 项的 1~n-1 与 n 的gcd的和,sum数组存的是 f 数组的前缀和。sum[n]=f[1]+f[2]+f[3]+…+f[n]sum[n-1]=f[1]+f[2]+…+f[n-1]sum[n]=sum[n-1]+f[n]所以我们求出f[n]的值即可1~n-1与 n 的最大公约数暴...原创 2019-08-13 20:54:34 · 405 阅读 · 0 评论 -
HDU 4497 GCD and LCM 素因子分解+ gcd 和 lcm
题意:给两个数,lll 和 ggg,为x , y , z,的最小公倍数和最大公约数,求出x , y , z 的值有多少种可能性思路:将x , y , z进行素因子分解素因子的幂次xa1 a2 a3 a4yb1 b2 b3 b4zc1 c2 c3 c4gcdmin(a1,b1,c1) min(a2,b2,c3)…lcmmax(a1,...原创 2019-08-13 21:58:13 · 191 阅读 · 0 评论 -
Soldier and Number Game CodeForces - 546D 素因子数打表(素数筛的改造)
题意:输入 a 和 b(a>b),求a! / b!的结果最多能被第二个士兵给的数字除多少次。思路:a! / b!肯定能把b!约分掉,只留下b+1~a的数字相乘,所以我们求b+1 ~ a的所有数字的素因子数的和。所以最主要是想一个快速求素因子的方法,在素数筛的基础上改造。 for(int i=2; i<N; i++) if(!su[i]) {...原创 2019-08-15 14:39:31 · 169 阅读 · 0 评论