![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论专题之初学
knownothing
这个作者很懒,什么都没留下…
展开
-
hdu 1262 寻找素数对
题意:输入一个偶数n,找出最接近的一对素数x,和y,使得x+y=n;题解:题中n先找出小于10000的所有素数。这个有模板,两个for解决。之后枚举下所有对素数,将差最小的对存在结构体数组里。查询的时候直接调用数组即可。耗时:0MS#include #include #include #include #include #include using原创 2013-09-25 15:03:22 · 1298 阅读 · 0 评论 -
hdu 1214 圆桌会议
题意:n个人围成一个圈,现在每分钟交换一次相邻的位置,问最少需要多少分钟,n个人的顺序与原始顺序相反。例1234变成4321. 题解:一条线上的n个人,123..n变为n..321,需要1+2+...+(n-1)=n*(n-1)/2次,即1右移n-1步,2右移n-2步..。而该题是围成一圈,所以可以双向移动,因而将n分成两部分,n/2和n-n/2,两部分独自逆序。可以达到时间最少原创 2013-09-25 15:18:42 · 1794 阅读 · 0 评论 -
hdu 1060 Leftmost Digit
题意:求n^n的第一个数字是多少?题解:c=log10(n^n)=nlog10(n),a是c的整数部分,b是c的小数部分,a+b=c;n^n=10^c=10^a*10^b,所以10^b=10^c/10^a=10^(c-a),10^b的整数部分是一位,就是答案了。耗时:0MS#include #include #include #include #include #in原创 2013-09-25 23:05:58 · 896 阅读 · 0 评论 -
hdu 1124 Factorial
题意:求n!的末尾有多少个0?题解:想要末尾为,只有2*5得到,将n!分解质因数,得到a个2和b个5,则答案就是min(a,b);我们知道1~n中有n/2个是2的倍数,n/4个是4的倍数...所以分解质因数中2的个数是(n/2+n/(2^2)+n/(2^3)+...),同理得到5的个数。我们可以发现5的个数必定比2少,所以只要求5的个数即可。ans=(n/5+n/25+n/125+..原创 2013-09-25 22:52:30 · 961 阅读 · 0 评论 -
hdu 1299 Diophantus of Alexandria
题意:输入n,问存在多少对(x,y),符合1/x+1/y=1/n,其中x题解:变换下公式,得到y=(n*x)/(x-n),令a=x-n,则y=n*(n+a)/a=n*n/a+n。所以只要a是n^2的因子符合条件。直接计算n^2的因子数,必定超时。所以我们想到n的某个质因子个数为k,则n^2的质因子个数为2*k,这个很容易理解。而有个定理:一个数的因子数等于各个质因子个数+1的乘积。如24=2*原创 2013-09-25 23:23:16 · 812 阅读 · 0 评论 -
hdu 3923 Invoker polya定理
题意:说的是dota里的召唤师的技能组合,玩过,嘿嘿。。有m种元素,现在选n个元素围成一圈组成一个技能(元素选择可以重复),其中n个元素通过旋转或者翻转得到的一种已知排列,记为重复。问有多少种不重复组合方案。题解:纯粹的polya定理题,polya定理的详细介绍请百度,这里简要介绍下:先介绍循环数。举例来说一个圈1->2->3->4->5->6,顺序时针旋转2格,5->6->1->2-原创 2013-09-27 20:30:59 · 1810 阅读 · 0 评论 -
poj 2689 Prime Distance 素数
题意:输入区间[l,u],其中l和u为int范围的整数,区间最大为1000000。求出[l,u]中,相邻素数只差最大和最小的素数对。当存在多个时,输出较小的素数对。题解:l,u范围太大,不能直接求int范围的素数。而区间间隔比较小,只有1e6,而且对于int范围内的合数来说,最小质因子必定小于2^16。所以可以求出[l,u]中合数,转而求出素数,然后暴力枚举所有素数对即可。如何求区间[l,原创 2013-09-27 21:43:43 · 5451 阅读 · 1 评论 -
hdu 4497 GCD and LCM 容斥原理
题意:已知l,g其中g=gcd(x,y,z),l=lcm(x,y,z),问有x,y,z多少种组合使得关系成立。 题解:已知x%g=y%g=z%g=0,l%x=l%y=l%z=0,所以l%g=0。这个可以判定是否存在(x,y,z)符合条件。又l/g=p1^a1*p2^a2*p3^a3*...pk^ak.(pi为素数)x/g=p1^b1*p2^b2*...*pk^(bk)原创 2013-09-27 19:54:49 · 2492 阅读 · 0 评论