数论
天宇skyblue
这个作者很懒,什么都没留下…
展开
-
hdu5950 矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950题目大意:给你f(1) = a , f(2 ) = b ,f(n) = 2*f(n-2) + f(n - 1) + n ^4(n >= 3);思路: 当n >= 3 时 , 有f(n) = 2*f(n-2) + f(n-2) + ( n-1)^4 + 4 * ( n-1)^3 +原创 2016-11-01 21:32:53 · 238 阅读 · 0 评论 -
cf 484B 二分+贪心
题目大意: 给定序列a , 求a[i] % a[j] 得最大值(a[i] > a[j])思路:最接近a[j]倍数的a[i]肯定更靠近最大答案,所以枚举所有a[j]倍数,二分找到最靠近倍数的数,然后比较即可。刚开始只找了2a[j],,显然单纯了。。#include #include #include #include #include #include #include原创 2016-01-05 15:32:52 · 352 阅读 · 0 评论 -
51nod1441 士兵的数字游戏 分解质因子
题目大意:两个士兵正在玩一个游戏,游戏开始的时候,第一个士兵为第二个士兵选一个正整数n。然后第二个士兵要玩尽可能多的轮数。每一轮要选择一个正整数x>1,且n要是x的倍数,然后用n/x去代替n。当n变成1的时候,游戏就结束了,第二个士兵所得的分数就是他玩游戏的轮数。为了使游戏更加有趣,第一个士兵用 a! / b! 来表示n。k!表示把所有1到k的数字乘起来。那么第原创 2016-01-21 19:36:47 · 338 阅读 · 0 评论 -
51nod1670 打怪兽 期望,数学
题目大意:lyk在玩一个叫做“打怪兽”的游戏。游戏的规则是这样的。lyk一开始会有一个初始的能量值。每次遇到一个怪兽,若lyk的能量值>=怪兽的能量值,那么怪兽将会被打败,lyk的能量值增加1,否则lyk死亡,游戏结束。若怪兽全部打完,游戏也将会结束。共有n个怪兽,由于lyk比较弱,它一开始只有0点能量值。n个怪兽排列随机,也就是说共有n!种可能,lyk想知道结原创 2016-01-21 15:54:35 · 429 阅读 · 0 评论 -
hdu1438 递推
一次比赛遇到了,后来才知道是hdu题目,当时没退出来……学习了别人的思路。链接为:点击打开链接一把锁匙有N个槽,槽深为1,2,3,4。每锁匙至少有3个不同的深度且至少有1对相连的槽其深度之差为3。求这样的锁匙的总数。递推方程式如下1:如果X是钥匙 则X1/2/3/4也是 所以a[I]=a[I-1]*42: 如果X不是,X2/3是则X由1/4组成/但要除去全1和全4 所以a[原创 2015-12-01 19:54:01 · 358 阅读 · 0 评论 -
hdu2669 扩展欧几里得
题目大意:求ax+by=1的非负整数x和y(x最小)思路:简单的扩展欧几里得1、ax+by=c若有解(x0,y0),则必有(a,b)|c , 其中(a,b)表示a,b的最大公约数,可以整除c则有解。2、若(a,b)=1 , 则方程全部解为:x=x0+bt ,y=y0-at3、若(a,b)> 1 , 则方程全部解为:x=x0+bt/d ,y=y0-at/d , d=(a,b);原创 2015-12-16 20:26:15 · 250 阅读 · 0 评论 -
hdu3959
题目大意:n个人,m个数,m^x>=n ,(1)先确定x(2)每个人选x个元素(1~m,可重复),(3)摇x次骰子,决定一个序列,如果有人的序列和摇出来的一样,则这个人为裁判,否则重复(1)~(3).问选出裁判的期望次数思路:每个人有选x个元素 , 每个位置有m中选择,总共有m^x中序列,摇x次选出裁判的概率m^x/n,x的期望为x*m^x/n.#include #inc原创 2015-12-16 19:33:22 · 315 阅读 · 0 评论 -
CF 603B 数学,同余
题目大意:给出方程f(kx%p)=kf(x)%p ,问在集合A->B上不同的映射函数f 有几种,其中A=B={0,1,2..p-1},p为素数(除了2),k为小于p的一个常数思路: 因为f(kx%p) , 将x = kx 带入得f(kx%p) = f(k*kx%p),所以乘以k除以k相等,所以f(x%p) = f(kx%p) , 又因为f(kx%p)=kf(x)%p ,原创 2015-12-15 20:44:42 · 293 阅读 · 0 评论 -
BZOJ2440 莫比乌斯反演 + 二分+ 容斥
第一次做莫比乌斯反演,并不太懂,先记录一下,x以内i*i的倍数个数为:n/(i*i);故有 Q(x) = sig(mou[i] * n / (i* i));根据容斥原理可知 对于√x以内的所有质数 x以内的无平方因子数=无需是任何质数的倍数的数的数量(即x)-是至少一个质数平方倍数的数的数量+是至少两个质数平方倍数的数的数量-是至少三个质数平方倍数的数的数量...原题解原创 2015-10-30 19:12:46 · 376 阅读 · 0 评论 -
斐波那契首项 BAPC2014 I&&HUNNU11589:Interesting Integers
题目大意:给定一个数n,按斐波那契数规则生成,求最小的b,并使a最小。G1 = a , G2 = b; b >= a.思路分析:因为n#include #include #include #include #include #include using namespace std;#define maxn 99999999#define mem(a) memset(原创 2015-11-21 16:09:21 · 490 阅读 · 0 评论 -
cf509e 数学+字符串
题目大意:给定一个字符串,求任意子串中元音字母I, E, A, O, U, Y所占比例之和。 要求 : 思路:咋一看很困难,细细一想就知道怎么作了。因为要求所有子串,所以枚举每个长度,求出当前长度的所有子串的元音字母所占比例,求和即为结果。接下来就是怎么求所有子串中元音字母个数以及所占比例了。因为当子串长度为i时,必然可以有好多个,simple(i)中分母值一定,分子值相加原创 2015-11-05 16:50:24 · 371 阅读 · 0 评论 -
hdu5451 矩阵乘法+斐波那契 + 循环节
找循环节:点击打开链接 正解:点击打开链接解题思路: 这道题跟斐波拉契数列有关,斐波拉契数列通项公式an=((1+√5)/2)^n+(1-√5)/2)^n,这题也可以转化为an=(5+2*sqrt(6))^n+(5-2*sqrt(6))^n的形式,则an一定是整数的形式, 因为an=((5+sqrt(6))+(5-s转载 2015-10-21 10:18:36 · 638 阅读 · 0 评论 -
cf592c 数学 超范围大数
题目链接这个写法有个坑就是如果最大公约数是1是最小公倍数必然是两个数乘积,可能爆 long long,所以取巧处理了一下#include #include #include #include #include #include #include #include #include #include #include #include using names原创 2015-11-03 12:50:34 · 938 阅读 · 0 评论 -
codeforces 476C 推公式
题目大意:给定a,b,对于一个数x,若x是nice number,则满足(x/b)/(x%b) == [1,a](即结果在1-a之间)问:输出一个数表示 所有nice number的和。思路:令 d = div(x, b), m = mod(x, b), 则:d = mkx = db + m有 x = mkb + m = (kb + 1) * m。求出m,k即可原创 2015-12-22 10:23:42 · 393 阅读 · 0 评论 -
CF595B 数学
题目大意:给定长度为n的号码,分为k块,有序列a[n/k] , b[n/k] .定义good电话号码为第i块不以b[i]开头且能被a[i]整除,求对给定的n,k有多少good 号码,结果对1e9+7取模思路:因为可以分块,所以对每个块有多少种情况进行计算就可以了,每个块可能的情况总数直接相乘。计算时b[i]可能为0,需要讨论一下。预处理f[i]表示i+1位数的最小值。计算每个数据范原创 2015-12-22 23:01:09 · 1681 阅读 · 0 评论 -
51nod1419 lcm,规律
找规律就行,只需要找到三个数互质且最大那么就是答案。#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#pragma comment(原创 2016-02-03 13:10:54 · 328 阅读 · 0 评论 -
hdu5902 数论
题目大意:给你n个数,每次取任意三个a , b , c,任取其中两个的gcd = d , 将d , d放回原数列。问经过n-2次后哪些数可能剩下。思路:求两两的gcd,对gcd和原数列求gcd,知道不在产生新的gcd即可。#include #include #include #include #include #include #include #incl原创 2016-10-16 18:23:35 · 299 阅读 · 0 评论 -
codeforces 16C 数学(比例变换)
题目链接:http://codeforces.com/problemset/problem/16/C题目大意:给你原始尺寸a:b 和 目标比例x:y , 问面积最大的长a和宽b。思路:首先要化简x:y,因为4:3肯定是8:6.(很重要)其次,要开longlong。1、如果化简后的比例比x或y大,显然不可以2、然后就是讨论bx和ay谁比较大就可以了,前者大,按x分原创 2016-10-11 16:34:24 · 319 阅读 · 0 评论 -
hdu5726 GCD 多校1
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726题目大意:给你一个数列,问有多少个子区间的GCD等于给定区间的GCD思路:区间GCD用线段树,查询多少个子集可以暴力预处理出所有区间的GCD,处理时,利用滚动的map记录到达当前位置的gcd和数量,代码里面用f表示#include #include #include #i原创 2016-07-23 09:03:24 · 287 阅读 · 0 评论 -
hdu5690 快速模幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5690题目大意:F(x,m) 代表一个全是由数字x组成的m位数字。请计算,以下式子是否成立:F(x,m) mod k ≡ c思路:因为有m个x,还有取模操作,所以可以快速模幂把m位的x对k取模的就过求出来,然后在和c对k取模结果比较即可。因为取模是有个除法操作所以可以用逆元,原创 2016-05-21 19:05:56 · 540 阅读 · 0 评论 -
poj1845 逆元,快速模幂
题目大意:给定两个正整数和,求的所有因子和对9901取余后的值。分析:很容易知道,先把分解得到,那么得到,那么 的所有因子和的表达式如下 因为要取模且存在除法,所以要用到逆元。对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫做模的逆元。 逆元一般用扩展欧几里得算法来求得,如原创 2016-04-22 13:29:43 · 1083 阅读 · 0 评论 -
51nod 125乘法逆元 (扩展欧几里得)
给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。Input输入2个数M, N中间用空格分隔(1 Output输出一个数K,满足0 Input示例2 3Output示例2思路:对于正整数和,如果有,那么把这原创 2016-04-22 09:28:11 · 1038 阅读 · 0 评论 -
欧拉函数详解 + 整数唯一分解定理 + 欧拉定理(高阶幂次取模)
定理:任意大于1的整数都能表示成素数的乘积,即对任一整数a > 1,有a = p1p2…pn , p1 并且表达式是唯一的。p[i] = k, 表示i这个质因子有k个定义:在数论,对正整数n,欧拉函数是小于等于n的数中与n互质的数的数目。ϕ (n) = 1..n中与n互质的数的个数如何求ϕ (n)?素因子展开+容斥原理令n原创 2015-08-01 11:01:52 · 3263 阅读 · 0 评论 -
乘法逆元
定义:满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。为什么要有乘法逆元呢?当我们要求(a/b) mod p的值,且a很大,无法直接求得a/b的值时,我们就要用到乘法逆元。我们可以通过求b关于p的乘法逆元k,将a乘上k再模p,即(a*k) mod p。其结果与(a/b) mod p等价。证:(其实很简单。。。)根据b*k≡1 (mod p)有b*k=p*转载 2016-04-20 18:03:10 · 282 阅读 · 0 评论 -
hdu5698 Lucas 大组合数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5698题目大意:有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的格子有几种方案,答案对1000000007取模。思路:打个表,就可以找出规律了,求组合数。。。原创 2016-05-26 09:57:13 · 219 阅读 · 0 评论 -
HDU5656 所有子集GCD和
题目大意:给你一个集合,求所有子集的gcd之和。所有数据均小于等于1000,集合数量小于等于1000.结果对1e8+7取模思路:我们考虑记f[i]表示从这些数中选择若干个数,使得他们的gcd是i的倍数的方案数。假如有K个数是i的倍数,则f[i]=2^K-1,再用g[i]表示从这些数中选择若干个数,使得他们的gcd是i的方案数,则g[i]=f[i] - g[j] (对于所有j是i原创 2016-04-04 16:11:24 · 1232 阅读 · 0 评论 -
51nod1040最大公约数之和
题目大意:给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 61,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15Input1个数N(N Output公约数之和思路:将n分解质因子,每个质因子贡献的是多少,累加求和。每个质因子贡献的次数可以用欧拉函数来求。若n%i==0 , 且n/i原创 2016-03-08 18:53:10 · 321 阅读 · 0 评论 -
51nod1179最大的最大公约数
题目大意:给出N个正整数,找出N个数两两之间最大公约数的最大值。例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。Input第1行:一个数N,表示输入正整数的数量。(2 <= N <= 50000)第2 - N + 1行:每行1个数,对应输入的正整数.(1 Output输出两两之间最大公约数的最大值。思路:因为原创 2016-03-08 17:43:25 · 514 阅读 · 0 评论 -
zoj3903 大数相乘
注意溢出#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define MOD 1000000007//typedef long long原创 2015-10-16 17:15:53 · 389 阅读 · 0 评论 -
hdu5288 vector用法+ ……(多校1.1)
题目大意:给定一个序列含有n个数,定义f(l,r) = l ~r序列中没有因子的数的个数 ,求n个数的序列中所有的连续子序列的f和。对1000000007取模思路:定义数组l , r .l[i] , r[i] 分别表示第i个元素左边最近因子的位置和右边最近的因子的位置。则第i个数贡献的f值为(i - l[i]) * (r[i] - i )。在求l 和r的过程中,肯定不能每个因子都去遍历着原创 2015-08-02 20:39:19 · 334 阅读 · 0 评论 -
hdu1394 逆序数?
个人觉得题目意思不清楚,,求得是逆序对数还是什么……看别人的代码好像直接就找规律,,留待以后研究吧………………#include #include #include #include #include using namespace std;int dp[10010];int a[10010];int main(){ int N ; while原创 2015-08-02 13:11:03 · 302 阅读 · 0 评论 -
hdu1060 N^N首位 log10
一个数a必然可以表示为10^(c+d),其中c为整数,d为小数。则n^n的首位取决于d的第一个有效数字。10^d是讲小数点后移的。#include #include #include #include #include #include #include #include using namespace std;int main(){ int t; cin原创 2015-07-15 10:33:29 · 405 阅读 · 0 评论 -
hdu1292 组合数学+递推
p[i][j] = p[i-1][j-1] + p[i-1][j] * j表示i个人分为j队,p[i-1][j-1]表示第i个人并入已有队列,p[i-1][j]*j表示第i个人单独成一队。#include #include #include #include #include using namespace std;long long p[26][26];int main()原创 2015-07-15 10:04:14 · 413 阅读 · 0 评论 -
汉诺塔问题
题目汉诺塔是源自印度神话里的玩具。上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今还在一刻不停地搬动着圆盘。我们把这个问题重新描述一下:原创 2015-07-14 19:52:59 · 470 阅读 · 0 评论 -
cug1559 最少操作次数
题目大意两个数A和B,将其用二进制表示后问改变多少次可以将A变为B。操作为1变0或0变1.思路:两个数异或后1的个数即为两个数不同的位数#include #include #include #include #include #include #include #include using namespace std; int main(){ in原创 2015-07-14 18:29:34 · 289 阅读 · 0 评论 -
hdu 1443 + cug1015 约瑟夫问题变型
直接暴力会超时死的不能再死,然后用数组每次查找下一个被干掉的人,如果小于k,干掉。cug的不能用该方法做,会超时,因为数据量小,直接用hdu的方法就把前面的结果算出来保存起来,最后直接AC。#include #include #include #include #include #include #include #include using namespace std;原创 2015-07-14 10:28:11 · 293 阅读 · 0 评论 -
约瑟夫问题 链表法
n代表总数,编号1~n,m代表从第几个开始数,k代表数几个就去掉#include #include #include #include #include #include #include #include using namespace std;struct node{ int num; node *next; node *per;};v原创 2015-07-13 20:25:41 · 442 阅读 · 0 评论 -
hdu2710 筛选法求素数
求n个数中拥有最大素因子的数。打表直接暴力求解#include #include #include #include #include #include #include #include using namespace std;bool prime[20001];int max_prime[20001];int a[20001];int b[20001];vo原创 2015-07-13 19:25:29 · 321 阅读 · 0 评论 -
LA3882 约瑟夫问题变形
链表法超时。递推找规律。n 总数,m第一个去掉哪一个,k数几个去掉。#include #include #include #include #include #include #include #include using namespace std;struct node{ int num; node *next; node *pe原创 2015-07-13 20:34:37 · 470 阅读 · 0 评论 -
hdu1852 快速模幂
题目大意:给出n,k,s为2008的n次幂的所有因子和,m为s%k,求2008的m次幂%k分析:2008 = 2^3 * 251;故 2008 ^ n = 2 ^ 3n * 251 ^ n;设集合C= {2^0 , 2^1 , …… , 2^3n};sum(C) = 2^(3n+1) - 1;集合W = {251^0 , 251^1 , …… ,251^n};sum原创 2015-07-13 16:28:47 · 831 阅读 · 0 评论