
数论
ITCharge
高效率编程,慢节奏生活。
展开
-
HDU5478 Can you find it【同余问题】
题目大意:给你一个素数 C(1 <= C <= 2*10^5) 和整数 k1、b1、k2(1 <= k1,k2,b1 <= 10^9)。找出有多少个(a,b)满足 a^(k1*n+b1) + b^(k2*n-k2+1) ≡ 0(mod C)(n = 1,2,3,…)如果找不到则输出 -1。解题思路:先来看同余的几个基本定理。1. a ≡ b(mod m),当且仅当 m | (a-b)。2. a ≡ b(mod m),当且仅当存在整数 k,使得 a = b + k*m。3. 同余关系是等价关原创 2015-10-11 15:27:09 · 707 阅读 · 0 评论 -
整数快速幂【模板】
LL QuickMod(LL a,LL b,LL m) //a^b % m{ LL ans = 1%m; a %= m; while(b > 0) { if(b&1) ans = ans*a%m; a = a*a%m; b >>= 1; } return ans;}原创 2015-04-16 14:51:30 · 668 阅读 · 0 评论 -
欧拉函数【模板】
直接欧拉函数int Euler(int n) { int ret = n; for(int i = 2; i*i <= n; ++i) { if(n % i == 0) { n /= i; ret = ret - ret/i; }原创 2015-04-15 16:13:52 · 991 阅读 · 3 评论 -
POJ1006_Biorhythms【中国剩余定理】
POJ1006_Biorhythms【中国剩余定理】原创 2014-09-15 10:31:12 · 1073 阅读 · 0 评论 -
POJ2992 Divisors【因子个数】
题目大意:求解出组合数C(n,k)的约数个数。思路:数据中的n和k值都比较大,直接求解显然不可以。求约数个数,要先进行素因子分解。C(n,k) = n!/(k!*(n-k)!)。n范围小于等于431,可以先筛选出431以内的素数,用数组Primer[]来存储素数。对每个阶乘进行素因子分解,用数组jie[i][j]来表示阶乘i进行分解式第j个素数的幂。然后求组合数的素因子分解,利用公式得到因子个数。原创 2015-03-24 20:50:24 · 1861 阅读 · 1 评论 -
POJ3696 The Luckiest number【欧拉函数】
题目大意:给你一个数N,问是否存在L的倍数M,且数M各个位上都由8组成,如果存在多个M,输出最小的那个,并输出M由几个8组成。思路:设长度为x,由题意可知,长度为x的由8组成的数可以被L整除。形式为88…88,由于10^x-1是长度为x、全部由9组成的数,则(10^x-1)/9*8 = L*k(k倍),即(10^x-1)*8= 9*L*k。则(10^x-1)*8/gcd(8,L) = 9*L*k/gcd(8,L)令p = 8/gcd(8,L) q = 9*L/gcd(8,L),则(10^x原创 2015-03-24 19:58:58 · 809 阅读 · 0 评论 -
POJ1995 Raising Modulo Numbers【整数快速幂】
题目大意:N个人在一起玩游戏,每个人默写两个数字Ai、Bi,在同一个时间公开给其他玩家看。游戏的目的是为了看谁能够在最快的时间求出所有的Ai^Bi的和对M取模的值。那么问题来了:你能够快速算出(A1B1+A2B2+ ... +AHBH)mod M 的值吗?思路:用二分整数快速幂算法计算出每一个Ai^Bi,然后依次相加取模。原创 2015-03-18 14:53:51 · 772 阅读 · 0 评论 -
POJ3243 Clever Y【高次同余方程】
题目大意:已知公式A^x mod C= B,以及A、C、B的值,求解x的值为多少。思路:典型的求解方程A^x = B(mod C),直接模板解决。原创 2015-03-18 10:37:20 · 912 阅读 · 0 评论 -
HDU2815 Mod Tree【高次同余方程】
题目大意:有一颗树,每个节点有K个儿子,那么问题来了:能否算出这棵树的最小深度D,使得这个深度的节点数对P取模的结果为N吗?思路:转换一下题目含义,就变成了解K^i = N(mod P),典型的A^i = B(mod C)问题,此题B的范围明显在[0,C-1]之间,若不在此区间,方程显然没解。原创 2015-03-18 10:49:52 · 1010 阅读 · 0 评论 -
POJ2417 Discrete Logging【高次同余方程】
题目大意:已知整数P、B、N满足公式B^i = N(mod P),求i的值是多少。思路:典型的解高次同余方程A^x = B(mod C),直接套模板解决。注意输入顺序:C A B原创 2015-03-18 10:43:33 · 920 阅读 · 0 评论 -
HDU1787 GCD Again【欧拉函数】
题目大意:给你一个整数N,求范围小于N中的整数中,与N的最大公约数大于1的整数的个数。思路:典型的欧拉函数变形。欧拉函数φ(N)是用来求小于N的整数中,与N的最大公约数为1的数的个数。那么此题的答案ans = N - φ(N) - 1。原创 2015-03-30 11:12:51 · 1425 阅读 · 0 评论 -
HDU3579 Hello Kiki【一元线性同余方程组】
题目大意:Kiki有X个硬币,她用不同的方式数了N次,每次她把硬币分成大小相等的组,记录每次一组硬币的个数Mi和数完最后剩余的硬币数Ai。那么问题来了:总共有多少枚硬币?思路:典型的一元线性同余方程组X = Ai(mod Mi)求解。题目要求输出最小正整数解,则如果求得同余方程组的解为0,那么答案就是所有Mi的最小公倍数。原创 2015-03-17 22:04:35 · 967 阅读 · 0 评论 -
POJ2447 RSA【公匙密码】
题目大意:RSA是个有名的公匙密码系统。在这个系统中,每个参与者有一个只能自己知道的私匙和一个每个人都知道的公匙。为了安全地把信息传递给对方,应该用公匙对信息进行加密,对方用自己的私匙进行解密。对RSA系统的描述如下:首先,选择两个大素数P、Q,计算N = P * Q。然后,选择一个正整数E作为加密密匙,令T = (p-1)*(q-1),且gcd(E,T) = 1。最后,计算解密密匙D,使得(E * D) mod T = 1,这里D是E模T的逆元。公匙表示为{E,N},私匙表示为{D,N},P原创 2015-03-28 10:32:18 · 1354 阅读 · 0 评论 -
HDU1211 RSA【公匙密码】
题目大意:RSA是个很强大的加密数据的工具,对RSA系统的描述如下:选择两个大素数p、q,计算n = p * q,F(n) = (p-1)*(q-1),选择一个整数e,使得gcd(e,F(n)) = 1,e是公匙,计算d使得d * e mod F(n) = 1 mod F(n),d是私匙。加密数据的方法为 C = E(m) = m^e mod n解密数据的方法为 M = D(c) = c^d mod n其中,c是密文中字母的ASCII的值;m是明文中字母的ASCII的值。现在问题原创 2015-03-28 10:13:50 · 1645 阅读 · 0 评论 -
HDU1573 X问题【一元线性同余方程组】
题目大意:求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod a[i] = b[i], … (0 < a[i] <= 10)。思路:先求出数组b[]中所有数的最小公倍数lcm,再求解出该一元线性同余方程组在lcm范围内的解为a,题目要求解x是小于等于N的正整数,则可列不等式:a + lcm * x <= N。那么,如果a = 0,则答案为x-1,如果a != 0,则答案为x。原创 2015-03-17 09:10:36 · 894 阅读 · 1 评论 -
POJ2159 Ancient Cipher【字符密码】
题目大意:古罗马帝王的保密服务部门的保密方法是替换和重新排列。替换方法是将出现的字符替换成其他的字符。如将'A'替换成'Z',将'Z'替换成'A'。排列方法是改变原来单词中字母的顺序。例如将顺序变为<2,1,5,4,3,7,6,10,9,8>。应用到字符串"VICTORIOUS"上,则可以得到"IVOTCIRSUO"。单用一种解密方法是不安全的,只有将两种方法结合起来才安全。那么问题来了:给你一个原文字符串和加密字符串,问是否能通过这两种加密方法结合,从而由原文信息得到加密信息。如果能则输出"原创 2015-03-28 10:02:05 · 2046 阅读 · 0 评论 -
POJ1107W's Cipher【字符密码】
题目大意:高级加密标准需要用到三个整数k1、k2、k3,然后把26个英文字母分为三组,字符[a~i]为一组,字符[j~r]是第二组,其他字符[s~z]和下划线_组成第三组。在信息中属于每组的字符,在加密的时候,都被循环的向左移ki个位置。每组的字符只在自己组中的字符构成的字符串中移动。现在给你加密过后的消息,请输出原文信息。思路:解密的过程其实就是信息中属于每组的字符,都循环的向右移ki个位置。用字符数组s[]来存储加密信息,s1[]来保存解密后的信息。统计每组字符的个数numi,如果不为0原创 2015-03-27 17:33:37 · 1283 阅读 · 0 评论 -
POJ2183 Bovine Math Geniuses【伪随机数】
题目大意:给定一个六位数,选择中间四位数字,求它的平方,只保留后六位数字。然后再选择新六位数字中间的四位数字,求这四位数字的平方,再只保留后六位数字。这样循环下去,直到出现重复的六位数字为止。输出第一次出现循环的六位数字,循环长度和循环前总共执行的操作步数。思路:直接模拟就可以了,用一个大于1000000的数组来存储六位数字,初始化为-1,出现六位数字,就将相应位置执行的操作次数,只要在相应位置上找到大于等于0的,就说明之前已经出现过了,然后输出结果。原创 2015-03-27 17:02:00 · 1067 阅读 · 0 评论 -
POJ1845 Sumdiv【因数之和】【二分求等比数列】
题目大意:对于两个自然数A和B,令s = A^B所有约数和,计算s%9901的结果是多少思路:小優的博客对这道题写的非常好,参考博文:http://blog.youkuaiyun.com/lyy289065406/article/details/6648539对A进行素因子分解,A = p1^k1 * p2^k2 * … * pm^km,则A^B = p1^(k1*B) * p2^(k2*B) * … *pm^(km*B)。利用乘性函数的性质:所偶因子和为 s = (1 + p1 + p1^2 + …原创 2015-03-24 22:42:43 · 941 阅读 · 0 评论 -
同余方程[组] 乘法模逆元 中国剩余定理【模板】
扩展欧几里得,求一组解x,y,使得gcd(a,b) = d = a * x + b * y扩展欧几里得,求所有解x,y,使得c = a * x + b * y扩展欧几里得,求a关于n的逆元a^-1,使得a * a^-1 ≡ 1(mod n)扩展欧几里得,求解x,满足同余方程组x ≡ Ri(mod Ai)扩展欧几里得,求解x,满足高次同余方程A^x ≡ B(mod C)原创 2015-04-15 16:05:36 · 2865 阅读 · 0 评论 -
POJ3101 Astronomy【素因子分解】【大数乘法】
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int MAXN = 1010;int GCD(int a,int b){ if(b == 0) return a; return GCD(b,a%b);}int A[MAXN],B[MAXN],C[MAXN*10];int ma原创 2015-11-15 20:25:20 · 1175 阅读 · 0 评论 -
POJ3126 Prime Path【数论】【BFS】
题目链接:http://poj.org/problem?id=3126题目大意:给你两个有四位数字的素数 A、B,问:每次只改变一个数字,且改变前后的数都是素数,那么从 A 变到 B,最少需要多少次。解题思路:用 BFS 来做。判断素数用筛法求素数打表预处理一下,不过注意 1000 以下的数要当非素数看待。每次改变一位数字,并且如果改变后的数仍为原创 2015-10-31 18:40:47 · 698 阅读 · 0 评论 -
HIT2813 Garden visiting【组合数】
题目大意:给你三个整数 N、M、P,求组合数 C(N+M-2,M-1) % P。解题思路:将阶乘表示为大整数分解的形式,将各个素因子按素因子的幂相乘起来就是所求答案(记得要对 P 取余)。原创 2015-11-15 17:12:29 · 671 阅读 · 0 评论 -
POJ2034 Anti-prime Sequences【素数筛法】【DFS】
题目大意:给你三个整数 N、M、D。使得从 N 到 M 的自然数按要求排列后,相邻且连续的D 个数内的自然数和为非素数。找到字典序最小的排列并输出,如果找不到则输出"No anti-prime sequence exists."。解题思路:用深搜来做,一步一步的确定第 Cnt 个数,直到找到 M-N+1 个数,并满足要求为止。判断相邻数的和是否为非素数可以用筛法求素数事先预处理一下。原创 2015-10-29 20:27:29 · 887 阅读 · 0 评论 -
POJ1365 Prime Land【质因数分解】【素数】【水题】
POJ1365_Prime Land【质因数分解】【素数】【水题】原创 2014-09-17 09:16:05 · 2324 阅读 · 0 评论 -
FZU1753 Another Easy Problem【组合数】
题目大意:给你 T 个组合数 C(N,K),求这 T 个组合数的最大公约数。解题思路:将组合数用 素因子分解的形式来表示。然后求出每个素因子在公约数中最小的阶,相乘得到答案。原创 2015-11-13 17:57:51 · 843 阅读 · 0 评论 -
POJ3358 Period of an Infinite Binary Expansion【欧拉函数】
题目大意:输入一个有理数,形式为分数形式p/q,令{x}为该有理数二进制形式的小数部分,且{x}具有循环性,{x} = 0.A1A2A3…Ar(Ar+1Ar+2…Ar+s)^w。循环从r+1位开始,循环节为s。现在称x1 = A1A2A3…Ar为{x}的循环前缀,x2 = Ar+1Ar+2…Ar+s为{x}的循环部分。现在让循环前缀的长度和循环部分的长度尽可能小。求最小循环部分的起始位置以及最小的循环长度。例如:1/10 = 0.0001100110011(00110011)^w,0001100原创 2015-03-24 20:40:59 · 979 阅读 · 0 评论 -
POJ2478 Farey Sequence【快速求欧拉函数】
POJ2478_Farey Sequence【快速求欧拉函数】题目大意:给你一个数n,对于0 < a < b <= n,求真分数a/b的个数思路:因为a/b为真分数,所以a和b互质。求真分数a/b的个数。其实就是求0 < i <= n中,小于i的正整数中,有多少个与i互质的数。累加起来就是真分数a/b的个数。其实就是欧拉函数因为n的规模为10^6,可用快速求欧拉函数的方法求得(类似于筛法求素数)。根据推论:设P是素数, 若p是x的约数,则E(x*p)=E(x)*p. 若p不是x的约数原创 2014-10-15 20:05:35 · 1377 阅读 · 0 评论 -
HDU4944 FSF’s game【因子和】【递推】
题目大意:给你一个数N,求出A、B分别为 1*1、1*2、…、1*N、2*2、2*3、…、2*N、……、N*N 中 A*B/gcd(A/K,B/K) 的值为多少。解题思路:设当 N = 1 时,ans[1] = 1*1/gcd(1,1) = 1。N = 2 时,ans[2] = 1*1/gcd(1,1) + 1*2/gcd(1,2) + 2*2/gcd(2,2) + 2*2/gcd(1,1) = 9。…… 可看出:ans[N] = ans[N-1] + Σ N*i/gcd(N/K,i/K)原创 2015-10-22 21:05:03 · 837 阅读 · 0 评论 -
POJ2947 Widget Factory【高斯消元】【同余方程】
题目大意:有 N 种装饰物,M 个已知条件,每个已知条件描述为:p s ta1,a2,…,ap (1 <= ai <= N)第一行表示从星期 s 到星期 t 一共生产了 p 件装饰物(工作天数可为 t - s + 1 + 7*x,因为可能生产不只一周)。规定每件装饰物至少生产 3 天,最多生产 9天。问:每种装饰物需要生产的天数。如果没有解,则输出"Inconsistent data.",如果有多解,则输出"Multiple solutions."如果有唯一解,则输出每种装饰原创 2015-09-16 22:41:32 · 594 阅读 · 0 评论 -
POJ2154 Color【Polya定理】【欧拉函数】【整数快速幂】
题目大意:给定 N 种颜色的珠子,每种颜色珠子的个数均不限,将这些珠子做成长度为 N 的项链。问能做成多少种不重复的项链,最后结果对 P 取模。并且两条项链相同,当且仅当两条项链通过旋转后能重合在一起,且对应珠子的颜色相同。解题思路:Polya定理的应用。先来看Polya定理。Polya定理:设 G = {a1,a2,…,ag}是 N 个对象的置换群,用 M 种颜色给这 N 个对象着色,则不同的着色 方案数为: |G|^(-1) * {M^c(a1) +原创 2015-08-20 18:17:02 · 1023 阅读 · 0 评论 -
HDU4059 The Boss on Mars【容斥原理】【乘法逆元】【高次求和】
题目大意:给一个整数N,求1~N中与N互质的数的4次方的和。解题思路:题目简单,过程有点复杂。理清思路就简单了。利用公式1^4 + 2^4 + … + n^4 = n*(n+1)*(2*n+1)*(3*n^2+3*n-1)/30,可以求出1^4 + 2^4 + … + n^4,除以30可以先求出30模M的逆元,然后将上式中除以30改为乘以30的逆元。再来求与n不互质的数的4次方和。将n质因数分解为 n = p1^a1* p2^a2 * … * pn^an(其中p1、p2为质数)。这样不互原创 2015-08-12 11:46:40 · 975 阅读 · 0 评论 -
HDU1695 GCD【容斥原理】【欧拉函数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695题目大意:给你5个整数a、b、c、d、k,在区间[a,b]中选一个数x,在区间[c,d]中选一个数y,使得x和y的公约数为k,即gcd(x,y) = k。现在问题来了:这样的整数对共有多少对。思路:题目假定a = c = 1,那么区间就变为了[1,b]和[1,d...原创 2019-12-06 10:23:00 · 1424 阅读 · 1 评论 -
HDU4135 Co-prime【容斥原理】
题目大意:给一个区间[a,b],从区间[a,b]中找出共有多少个数是与n互质的。思路:欧拉函数得到的是小于n与n互质的个数,这里是个区间。由于区间较大,不可能对[a,b]进行遍历,考虑计算区间[1,a-1]中与n互质的个数num1,[1,b]中与n互质的个数num2,最终结果就是两者相减的结果。现在考虑如何计算区间[1,m]中n互质的个数num,num等于 (m - 与n不互质的个数)。与n不互质的数就是[1,m]中n的素因子的倍数。例如m = 12,n = 30的情况。30的素因子数为原创 2015-03-26 16:16:13 · 2242 阅读 · 0 评论 -
HDU2841 Visible Trees【容斥原理】
题目大意:给一个含有N*M个点的矩阵,左下角的点为(1,1),右上角的点为(N,M),一个人站在(1,1)点看这些点,在一条直线上,他只能看到最前边的点,后边的点都被挡住看不到了。那么问题来了:这个人总共能看到多少个点?思路:发现一条线上的点,斜率都是一样的,后边的点都是最前边能看到点的倍数,能被看到的点都是横纵坐标公约数为1的点,即gcd(x,y) = 1,如果有一个点(x,y),有一个公约数d,即gcd(x,y) = d,那么,它就被前边(x/d,y/d)的点挡住了。问题就变求N*M个点原创 2015-03-26 22:42:37 · 1221 阅读 · 4 评论 -
最大公约数、最小公倍数【模板】
功能:求a和b的最大公约数传入参数:整数a、整数b传出参数:a和b的最大公约数算法1:欧几里得算法时间复杂度:O(n)实现原理:设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用b除a,得a÷b=q......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用r1除b,得b÷r1=q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……如此下去,直到能整除为止。其最后一个非零除数即为(a,b)。算法2:s原创 2014-12-18 12:59:20 · 2215 阅读 · 0 评论 -
试除法整数分解 筛法整数分解 PollardRho大整数分解【模板】
试除法整数分解 筛法整数分解 PollardRho大整数分解【模板】原创 2015-04-16 18:15:19 · 2028 阅读 · 0 评论 -
POJ3749 破译密码【字符密码】
题目大意:凯撒大帝的加密方法是:将原文的每个字母分别用该字母后边的第5个字母替换。现在给你加密后的信息,问信息原文是什么。思路:将加密消息的ASCII码值减去5,低于'A'字符的,ASCII码再加上26。直接输出即可。原创 2015-03-27 17:11:16 · 1473 阅读 · 0 评论 -
POJ2480 Longge's problem【乘性函数】
题目大意:给一个正整数n,求Σgcd(i,n),(1 <= i <= n)。思路:如果m,n互质,则gcd(i,m*n) = gcd(i,m) * gcd(i,n),所以gcd是乘性函数。因为乘性函数的和函数也是乘性函数,所以Σgcd(i,N)也是乘性函数。首先考虑gcd(x,n) = 1,这样的数和刚好为欧拉函数之和sum( φ(n)),现在考虑gcd(x,n) = p的情况,因为gcd(x/p,n/p) = 1,就变成了欧拉函数之和sum(φ(n/p)),所以gcd(x,n) = p,这种原创 2015-03-26 15:31:00 · 1017 阅读 · 0 评论 -
POJ2689_Prime Distance【素数】【两次筛法】
题目大意:给你一个区间【L,U】,求出从L到U之间素数序列中,连续两个素数差值最大的最小的两对素数对,但其中(1<=L< U<=2,147,483,647),但区间【L,U】距离不超过1000000思路:因为L,U的值太大了,普通素性判断和素数筛法都不可行,所以可以考虑先筛选一次,筛出50000以内的素数,然后用50000以内的素数再次筛选出区间【L,U】的素数。第一次素数筛法比较简单,主要是第二次筛法,分别判断【L,U】中每个数是50000以内的素数的多少倍,若为1倍,则从2倍开始筛选。若不为原创 2014-09-24 22:20:57 · 1293 阅读 · 0 评论