经过长时间的试验,发现果然学编程还是要学好数学先,数学引发的更加有质的变化,而盲目学各种编程语言也不能获得一种不一样的体验,或者我没掌握到诀窍。另外打算从这学期学的 信安数学基础 学到的庞大的数论体系开刀,上了这课明显体会到彻底自学就是扯蛋。
网上找到这份题目,还不错的赶脚,刷起!
2014-11-11开始刷起,有链接表示KO
博弈论
POJ 2234 Matches Game
POJ 2975 Nim
POJ 2505 A multiplication game
POJ 1067 取石子游戏
POJ 2484 A Funny Game
POJ 2425 A Chess Game
POJ 2960 S-Nim
POJ 1704 Georgia and Bob
POJ 1740 A New Stone Game
POJ 2068 Nim
POJ 3480 John
POJ 2348 Euclid‘s Game
POJ 3710 Christmas Game
POJ 3533 Light Switching Game
POJ 3537 Crosses and Crosses
数论/组合
1.burnside定理,polya计数法
这个大家可以看brudildi的《组合数学》,那本书的这一章写的很详细也很容易理解。最好能完全看懂了,理解了再去做题,不要只记个公式。
*简单题:(直接用套公式就可以了)
pku2409 Let it Bead
pku2154 Color
pku1286 Necklace of Beads
*强烈推荐:(这题很不错哦,很巧妙)
pku2888 Magic Bracelet
2.置换,置换的运算
置换的概念还是比较好理解的,《组合数学》里面有讲。对于置换的幂运算大家可以参考一下潘震皓的那篇《置换群快速幂运算研究与探讨》,写的很好。
*简单题:(应该理解概念就可以了)
pku3270 Cow Sorting
pku1026 Cipher
*置换幂运算:
pku1721 CARDS
pku3128 Leonardo‘s Notebook
*推荐:(不错的应用)
pku3590 The shuffle Problem
3.素数,整数分解,欧拉函数
素数是可能数论里最永恒,最经典的问题了(我们的队名就叫PrimeMusic^-^)。素数的判断,筛法求素数,大素数的判断···还有很多其他问题都会用到素数。
*最水最水的:(心情不爽时用来解闷吧)
pku1365 Prime Land
pku2034 Anti-prime Sequences
pku2739 Sum of Consecutive Prime Numbers
pku3518 Prime Gap
pku3126 Prime Path
pku1595 Prime Cuts
pku3641 Pseudoprime numbers
pku2191 Mersenne Composite Numbers
pku1730 Perfect Pth Powers
pku2262 Goldbach‘s Conjecture
pku2909 Goldbach‘s Conjecture
*筛法:
pku2689 Prime Distance(很好的一个应用)
*反素数:
zoj2562 More Divisors
*素数判断,整数分解:
这两题都要用到miller_rabin的素数判断和pollard_rho的整数分解,算法书上都会有,应该是属于模板题吧,不过最好看懂自己敲一遍。
pku1811 Prime Test
pku2429 GCD & LCM Inverse*欧拉函数:
数论里很多地方都能用到欧拉函数,很重要的。
pku1284 Primitive Roots (关于原根的定理:p的原根为euler(euler(p)),本题中当p为奇素数时euler(p)=p-1,故答案为euler(p-1))
pku2407 Relatives (很水)
pku2773 Happy 2006
pku2478 Farey Sequence (快速求欧拉函数)
pku3090 Visible Lattice Points (法雷级数)
*推荐:(欧拉函数,费马小定理)
pku3358 Period of an Infinite Binary Expansion
*整数分解
这个也很重要的耶,包括大数的表示方法。
pku2992 Divisors
pku3101 Astronomy (分数的最小公倍数)
4.扩展欧几里得,线性同余,中国剩余定理
这应该是数论里比较重要的一个部分吧,这类的题目也挺多,具体的内容最好先看看数论书,我也整理过一些,可以参考参考:
*简单题:
pku1006 Biorhythms
pku1061 青蛙的约会
pku2891 Strange Way to Express Integers
pku2115 C Looooops
pku2142 The Balance
*强烈推荐:
sgu106 The equation
pku3708 Recurrent Function (经典)
5.约瑟夫环问题
这个问题还是比较有意思的,不是很难。
*简单题:
pku3517 And Then There Was One
pku1781 In Danger
pku1012 Joseph
pku2244 Eeny Meeny Moo
*推荐:
pku2886 Who Gets the Most Candies?
6.高斯消元法解方程
其实解方程并不是很难,就是按线性代数中学的那种方法,把系数矩阵化成上三角矩阵或数量矩阵,不过有些题目要判断是否有解,或枚举所有解。不过这类题目我认为比较难的还是怎么去建立这个方程组,这个理解了,就没什么大问题了。
*简单题:
pku1222 EXTENDED LIGHTS OUT
pku1681 Painter‘s Problem
pku1830 开关问题
*推荐:
pku2947 Widget Factory
pku2065 SETI
*强烈推荐:
pku1753 Flip Game
pku3185 The Water Bowls
*变态题:
pku1487 Single-Player Games7.矩阵
用矩阵来解决问题确实很常见,但我现在用到还不是很好,很多难题我还不会做。建议大家可以去看Matrix67的那篇关于矩阵的十个问题,确实很经典,但不太好看懂。
*简单:
pku3070 Fibonacci
pku3233 Matrix Power Series
pku3735 Training little cats
8.高次同余方程
有关这个问题我应该是没什么发言权了,A^B%C=D,我现在只会求D和B,唉,很想知道A该怎么求。就先推荐几道题目吧,这里涉及到了一个baby-step,giant-step算法。
pku3243 Clever Y
pku2417 Discrete Logging
9.容斥原理,鸽巢原理
很有用的两个定理,但好像单独考这两个定理的不是很多。
*鸽巢原理:
pku2356 Find a multiple
pku3370 Halloween treats
*容斥原理:
hdu1695 GCD
hdu2461 Rectangles
10.找规律,推公式
这类题目的设计一般都非常巧妙,真的是很难想出来,但只要找到规律或推出公式,就不是很难了。我很多都是在参考别人思路的情况下做的,能自己想出来真的很不容易。
*个人感觉都挺不错的:
pku3372 Candy Distribution
pku3244 Difference between Triplets
pku1809 Regetni
pku1831 不定方程组
pku1737 Connected Graph
pku2480 Longge‘s problem
pku1792 Hexagonal Routes
11.排列组合,区间计数,计数序列
这些题目可能需要一些组合数学知识,基本上高中的知识就够了。区间计数问题一般不难,但写的时候需要仔细一些,各种情况要考虑到位。至于像卡特兰数,差分序列,斯特灵数···都还挺有意思,可以去看看《组合数学》。
*简单题:
pku1850 Code
pku1150 The Last Non-zero Digit
pku1715 Hexadecimal Numbers
pku2282 The Counting Problem
pku3286 How many 0‘s?
*推荐:
pku3252 Round Numbers
*计数序列:
pku1430 Binary Stirling Numbers
pku2515 Birthday Cake
pku1707 Sum of powers
12.二分法
二分的思想还是很重要的,这里就简单推荐几个纯粹的二分题。
*简单:
pku3273 Monthly Expense
pku3258 River Hopscotch
pku1905 Expanding Rods
pku3122 Pie
*推荐:
pku1845 Sumdiv
13.稳定婚姻问题
无意中接触到这个算法,还蛮有意思的,《组合数学》中有详细的介绍。
pku3487 The Stable Marriage Problem
zoj1576 Marriage is Stable
14.数位类统计问题
在航点月赛中第一次接触到这类问题,scau大牛little龙推荐我看了一篇论文,09年刘聪的《浅谈数位类统计问题》,这篇论文相当精彩,也相当详 细,每道题都有详细的分析和作者的参考代码。所以我也没什么可说的了,这些题的代码我博客里也就不贴了,大家直接去看论文吧。
简单:
ural1057 Amount of degrees
spoj1182 Sorted bit squence
hdu3271 SNIBB
较难:
spoj2319 Sequence
sgu390 Tickets
数论专题(转)
时间: 2024-11-05 11:26:54
数论专题(转)的相关文章
数论专题总结
数论专题总结 kuangbin带你飞之数论基础专题已经刷的差不多了,剩下三道一道中国剩余定理一道离散对数还有一道模拟,模拟那道应该是不会去做了,离散对数的那道看了很多题解一直没有理解题目的思路,只能先暂时放放了,中国剩余定理那道是刘汝佳大白书的例题,暂时没思路也只能先放放了,以后有机会再看下大白书,中国剩余定理已经了解了,离散对数的BSBS模版也有了,虽然这两道变形题暂时不会,但是数论专题部分基础已经有一些了,刷该专题的目标已经完成了,下一专题:kmp. 待补充......
ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德
POJ 1061 青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & %llu Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰
数论专题hdu2197
本题题意:求长度为n的本元串的个数,本元串就是无法由几个相同的子串拼接的01串. 代码如下: #include <iostream> using namespace std; typedef long long ll; const int mod = 2008; ll pow_(ll a,ll b,ll mod){ ll sum = 1; while(b){ if(b&1){ sum = sum * a % mod; } a = a * a % mod; b >>= 1;
数论专题hdu2582
本题题意:给出公式f(n) = gcd(3) + ... + gcd(n),而gcd(n) = gcd(C(1,n),...,C(n-1,n)),求出f(n)的值. 代码如下: #include <iostream> using namespace std; typedef long long ll; const int Max = 1000000; int prime[Max+1]; ll sum[Max+1]; void Prime(){ int t = 2; ll i; while(t
数论专题测试——幸运数字
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 using namespace std; 7 typedef long long int64; 8 int64 L; 9 int ca; 10 int64 phi(int64 x){ 11 int64 t=x; 12 for (int6
数论专题hdu2104
本题题意:有N个人,一个人从1开始走,每次间隔M-1个人,问他是否能走到所有的点,并回到原点. 代码如下: #include <cstdio> using namespace std; int gcd(int a,int b) { int r; while(b) { r = a % b; a = b; b = r; } return a; } int main(){ int m,n; while(~scanf("%d%d",&m,&n) &&
数论专题测试——逆元
题意:给定n,m,令k=1+sigam(inv(i,n))mod 1000000007. n,m小于等于10^7. 求k^k^k^k....后一个k是前一个k的指数, 求这个值对m的mod,知道指数循环节,这就是个傻逼题,然而考场就是不知道这个,少了点东西,所以出题人就是个傻逼.... 指数循环节:a^b%c=>a^(b%phi(c)+phi(c)) %c (b>=phi(c)). 这个题b永远无限大,就可以使用,可以考虑预处理出10^7范围内的phi,然后递归,当c==1时,返回0
ACM:数论专题(3)——约瑟夫问题
(p.s: 以前做约瑟夫问题都是用链表模拟,今天发现了一个效率更高的方法,受教了...) 题目描述: 小Hi和小Ho的班级正在进行班长的选举,他们决定通过一种特殊的方式来选择班长. 首先N个候选人围成一个圈,依次编号为0..N-1.然后随机抽选一个数K,并0号候选人开始按从1到K的顺序依次报数,N-1号候选人报数之后,又再次从0开始.当有人报到K时,这个人被淘汰,从圈里出去.下一个人从1开始重新报数. 也就是说每报K个数字,都会淘汰一人.这样经过N-1轮报数之后,圈内就只剩下1个人了,这个人就作
数论专题---除法表达式之高精度运算,扩展欧几里得算法
[题意描述] 给定这样一个表达式:X1/X2/X3/·····/Xk,其中Xi是正整数.除法表达式应到按照从左到右的顺序求和.但在表达式中嵌入括号可以改变计算顺序.输入表达式,判断是否可以通过加括号使得表达式最后的值为整数. [分析] 表达式可以写成E=(X1·X3·····Xk)/X2:(X1一定在分子位置,X2一定在分母位置,其它任意) 问题变为E是否为整数. 对于大数相乘,我们可以采用两种方法避免数据溢出: 1.采用素数的唯一分解定理:存储可能存在素数的个数(如何存储,用一个数组就行) 2