数论
小胡同的诗
千里之行,始于足下
展开
-
LeetCode793 阶乘函数后K个零(二分+数论)
题目链接:leetcode793题面题目大意f(x)f(x)f(x) 函数是一个求 x!x!x! 结果尾部 0 个数的函数,现在给你一个 K ,让你求能够找到多少个 x 使得 f(x)=Kf(x)=Kf(x)=K 。解题思路首先,我们考虑这个 f(x)f(x)f(x) 函数,不难得出 x!x!x! 尾部 0 的个数等于该数 2 和 5 因子的组数。分别考虑 x!x!x! 的 2 因子和 5 因子的个数取最小值即两个因子的组数,显然,对于 n!n!n! , 5 的因子个数一定小于 2 的因子,原创 2020-09-28 21:57:22 · 245 阅读 · 0 评论 -
乘法逆元的四种求法(拓展欧几里得、费马小定理、递归、递推)
前言逆元:如果a∗x≡1(mod p)a*x\equiv1(mod\ p)a∗x≡1(mod p),且a与p互质,则称x是a关于p的逆元。对于这个概念和倒数有本质的区别,因为除法不能将mod数化进去。引用一个例子:(a + b) % p = (a%p + b%p) %p (对)(a - b) % p = (a%...原创 2019-04-27 16:16:03 · 1450 阅读 · 0 评论 -
素数线性筛法(欧拉筛)
前言之前写的埃式筛法复杂度达O(n∗logn∗logn)O(n*logn*logn)O(n∗logn∗logn),在大数字的时候可能复杂度还不够理想。这种做法对于一个合数有可能会筛了多次,导致重复做功。引入欧拉筛法能够解决这种多次筛同一个数字的情况,理论算法复杂度O(n)O(n)O(n)。精髓在于pval[j]∣ipval[j] | ipval[j]∣i时就结束本次筛选。Code:const...原创 2019-04-23 23:46:28 · 241 阅读 · 0 评论 -
数论模板总结
转自https://www.cnblogs.com/bolderic/p/7406204.html一些常用的简单数论模板以及书中的定理 组合数取模1:N M < 1000, 杨辉三角双循环,边加边取模(代码未添加取模)1 c[1][1] = c[1][0] = 1;2 for(int i = 2; i <= 50; i++){3 c[i][0] = 1...原创 2019-04-24 23:14:42 · 427 阅读 · 0 评论 -
PAT -- 甲级1015(1015 Reversible Primes)
1015 Reversible Primes (20 分)A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime becau...原创 2019-04-29 20:37:47 · 200 阅读 · 0 评论 -
HDU1215七夕节(约数和定理)
题目链接:思路:这题数据规模不大,用下这个定理1ACode:#include <math.h>#include <stdio.h>const int mod = 1e9+7;int qpow (int a, int b) { int ans = 1; while (b) { if (b & 1) { ans = ans * a % mo...原创 2019-04-25 11:27:47 · 164 阅读 · 0 评论 -
A^B约数和
转自https://www.cnblogs.com/aininot260/p/9574789.htmlPOJ1845首先把A写成唯一分解定理的形式分解时让A对所有质数从小到大取模就好了然后就有:A = p1^k1 * p2^k2 * p3^k3 *...* pn^kn然后有: A^B = p1^(k1*B) * p2^(k2*B) *...* pn^(kn*B);约...转载 2019-04-25 12:25:33 · 348 阅读 · 0 评论 -
约数个数定理、约数和定理
原创 2019-04-25 12:27:08 · 713 阅读 · 0 评论 -
线性筛求约数个数以及约数和
转自 https://blog.csdn.net/controlbear/article/details/77527115刚才手动推了一下 用线性筛筛约数个数和约数和,就顺便写篇博客记录一下。不过网上应该也有不少人推过了。根据算术基本定理我们可以知道,每一个大于等于2的正整数,都可以被分解成这种形式。,其中 p 为素数。线性筛就是每一次被最小素因子给筛出。线性筛写法 (只筛素数) ...转载 2019-04-25 12:39:35 · 1953 阅读 · 0 评论 -
FZU2282(组合数+错排)
题目大意:一共n个数(1~n),问A[i] == i的个数大于等于k的方案数。解题思路:其实就是大于等于k个人筛掉后剩下的人进行错排的问题。选k~n个人对应得要乘上组合数,由于n比较大,k相对较小,可以打表数组肯定mle,于是可以反过来想:总得排列数是Ann,扣除小于k的方案就能够得到答案,由于所有打表都进行取模,最后还要防止变成负数!求组合数取模的问题也可以用卢卡斯定理方法求得。Code:...原创 2019-05-08 23:42:50 · 190 阅读 · 0 评论 -
LeetCode264丑数Ⅱ(动态规划 or 堆)
题目链接:leetcode264思路:堆每次把当前最小的丑数能递推到的丑数push进小根堆中,根据小根堆的性质每次pop一定是当前最小的丑数,复杂度O(nlogn)O(nlogn)O(nlogn)动态规划所有丑数的全集一定由2,3,5的倍数组成的集合以及1构成由于要按顺序输出丑数,即丑数集合要具有单调性枚举每个数字的倍数,显然一个数字的倍数集合单调递增维护三个指针每...原创 2019-09-23 10:09:50 · 312 阅读 · 0 评论 -
欧拉筛求1~n的欧拉值
前言首先,根据欧拉函数的公式可以证明它是一个积性函数,于是有ϕ(a∗b)=ϕ(a)∗ϕ(b)\phi(a*b)=\phi(a)*\phi(b)ϕ(a∗b)=ϕ(a)∗ϕ(b)。对于欧拉函数有个性质:当x∣p时,有ϕ(x∗p)=ϕ(x)∗p;否则ϕ(x∗p)=ϕ(x)∗ϕ(p)=ϕ(x)∗(p−1)当x|p时,有\phi(x*p)=\phi(x)*p;否则\phi(x*p)=\phi(x)*\ph...原创 2019-04-27 12:28:22 · 313 阅读 · 0 评论 -
euler函数以及筛法求1~n的euler值
euler函数:ϕ(n)=n∗∏i=1k(1−1pi)\phi(n)=n*\prod_{i=1}^k (1-\frac{1}{p_i})ϕ(n)=n∗∏i=1k(1−pi1)首先,ϕ(n)\phi(n)ϕ(n)表示小于或等于n的数中,与n互质的数的个数。特别的,ϕ(n)\phi(n)ϕ(n)=1。对于这个公式的理解:n以内的正整数有n个,而根据唯一因数分解定理又可得知n可以拆分成∏i=1...原创 2019-04-27 10:32:18 · 391 阅读 · 0 评论 -
蓝桥杯 包子凑数(数论+背包)
解题思路:首先用到欧几里得定理,一组数字互质,即公因数为1,那么不能凑到的数就有限;否则无限个。因为成倍加上去必然中间会有空挡。再考虑有限个怎么考虑,用完全背包,因为笼数是无限的,但是背包上限是怎么限制的呢,总之尽量大就没错了,这里我们考虑每种取1笼相加的情况,最多100笼,最多10000个包子,上限为10000.(ps:数论的东西还要加强,今年总感觉会考欧拉定理QAQ,还有7天就要比赛了,今年希...原创 2018-03-23 20:19:29 · 1453 阅读 · 0 评论 -
HDU2669Romantic(欧几里得拓展)
解题思路:纯粹的欧几里得拓展运用AC代码如下:#include<stdio.h>typedef long long ll;ll extend_gcd(ll A,ll B,ll xy[]){ if(B==0) { xy[0]=1; xy[1]=0; return A; } ll ans=extend...原创 2018-03-30 16:49:36 · 225 阅读 · 1 评论 -
数论 拓展欧几里得定理
#include<bits/stdc++.h>using namespace std;/*计算不定方程:AX+BY==1的解推导过程:必定存在Ax+By=gcd(A,B)的解x,y--->欧几里得拓展又gcd(A,B)=gcd(B,A%B)--->欧几里得定理(辗转相除法)则必有Bx+(A%B)y=gcd(B,A%B)--->①此时,我们考虑怎么...原创 2018-03-28 11:22:06 · 253 阅读 · 0 评论 -
HDU1576(欧几里得拓展)
思路:欲求:A/B%9973令 A/B==X 则A==X*B已知:B,N 且N==A%9973因为 gcd(B,9973)==1则 Bx1+9973y1==gcd(B,9973)==1…(1)又 N=A-A/9973*9973 == BX+9973(-A/9973)…(2)令Y==-A/9973则(2):BX+9973Y==N由(1):Bx1*N+9973y1*N==...原创 2018-05-30 20:39:51 · 250 阅读 · 0 评论 -
POJ1061(欧几里得拓展)
思路: 类似于小学两车追及问题,只不过该题的路是一个圈。直观思路是两青蛙的速度成比例的话,也就是不能到达,但很显然,这种做法是错的!这里需要用到欧拓,设时间为t. 由题意:(x+mt)%L==(y+nt)%L 可以转化为 : (m-n)t+NL==y-x**(N为常数) 求解t#include<iostream>#include<algorithm...原创 2018-05-30 23:05:12 · 168 阅读 · 0 评论 -
蓝桥杯--2015第六届C/C++B组省赛
相比较14年的难度下降,不过搜索的题目更多,多了一个树形DP(待补)奖券数目有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。请提交该数字(一个整数),不要...原创 2019-03-02 19:08:57 · 337 阅读 · 0 评论 -
快速乘+龟速乘(针对那些mod数超过1e9的情况)
原 【详解】快速幂&龟速乘&快速乘 2018年10月16日 20:16:42 Cyan_rose 阅读数:207 </div> <div class="operating">...转载 2019-03-03 21:17:03 · 590 阅读 · 1 评论 -
蓝桥杯--2017第八届C/C++B组省赛
搜索仍是重点,不过没上一届那么多了。基础的模运算和细节处理标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。 小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。 现在小明很心烦,请你帮他计算一下,...原创 2019-03-10 20:22:13 · 250 阅读 · 0 评论 -
关于某个日期快速计算是星期几(基姆拉尔森公式)
前言如果有这样的问题:如果y年m月d日是星期k,那么请问y1年m1月d1日是星期几?思路首先如果询问的日期都在1970年之后的话,我们可以使用Excel直接计算。Java的Calendar类,使用和Excel非常类似,略直接模拟,注意判断闰年,年份、月份、天数的变化处理基尔拉姆森公式:这个公式可以直接计算出那个日期是星期几,但请注意!这类问题如果假设和真实情况不符的时候要记得换上偏移...原创 2019-03-22 11:47:32 · 3561 阅读 · 0 评论 -
A^B的约数之和(二分法求等比数列和 + 约数和定理)
思路:约数和定理关于二分法:Code:#include <bits/stdc++.h>#define mod 9901#define rep(i,a,b) for (int i=a; i<=b; i++)using namespace std;int qpow (int a, int b) { int ans = 1; a %= mod; while ...原创 2019-04-25 21:32:03 · 211 阅读 · 0 评论 -
HDU1575Tr A(矩阵快速幂)
解题思路:我的第一题矩阵快速幂,一定要敲熟模板!!!AC代码如下:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<iostream>#include<algorithm>#include<queue&g原创 2018-03-09 23:20:22 · 192 阅读 · 0 评论