![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
文章平均质量分 70
logic_nut
这个作者很懒,什么都没留下…
展开
-
pku 3219 Binomial Coefficients(数论,位运算)
题目意思很简单,判断C(n,k)是偶数还是基数。C(n,k)=n!/(n-k)!k!。可以通过比较分母和分子中约数2的次数来判断。 但怎么得到n!中约数2的个数?a=0;while(n=n>>1) a+=n; 为什么这样是正确的?我们可以从二进制的角度来考虑,首先对任意一个数t,它的二进制表示的末端有多少个0,就说明t的约数2的次数是多少。于是我们要做的就是统计原创 2009-08-09 10:45:00 · 600 阅读 · 0 评论 -
google code jam 2010资格赛B题 Fair Warning
B题本身不是很难,最大公约数大家一般都能想到,关键是这里全是大整数。我昨天做题的时候临时写了一个大整数模板,为了方便我用不断做减法实现的求模运算,结果小数据还凑合,但大数据跑到第5组数据就卡着不动了。今天早上起来看官方分析,很明显的表示以后会出大整数方面的题目,让大家做好准备。根据提示找了到gmp类库,结果和VS兼容不好,搜到几个别人编译好的dll,但是好几年前的了,只能在vc6下。不原创 2010-05-09 15:56:00 · 1164 阅读 · 1 评论 -
google code jam 2008 Number Sets(模拟,数论)
google的题目总是看上去很直白,但却藏有很多优化方式。给个官方的分析。The process described is fairly slow: Create singleton sets of integers. Take each pair of integers; factor the two integers and see if they have a原创 2009-09-09 10:41:00 · 621 阅读 · 0 评论 -
pku 1269 Intersecting Lines(求两直线交点,解二元二次方程)
给定4个点坐标,前2个点确定一条直线,后2个点确定一条直线。判断2直线的关系:重合,平行,相交。如果相交,给出交点坐标。根据点坐标,可以给出两个直线方程。ax+b=cydx+e=fy#include using namespace std;int main(){ int N,x1,x2,x3,x4,y1,y2,y3,y4; int a,b,c,d,e,f;原创 2009-08-17 09:00:00 · 1120 阅读 · 0 评论 -
hdu 1134 Game of Connections(卡特兰(Catalan)公式)
<! v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}-->模型1: 有 2n 个不同的数排成一个圆圈,用 n 条直原创 2009-08-15 20:28:00 · 1863 阅读 · 1 评论 -
pku 1742 Coins(DP,母函数)
经典问题。给定n种硬币,每种硬币有相应的价值,并且每种硬币有一定的数量。问用这些硬币,可以组合出多少种不同的价值总和。 因为只需要记录某种价值总和是否存在,所以用bool[]存储信息即可。母函数思想和DP思想写出来的代码几乎是一致的。 #include using namespace std;bool DP[100005];struct node{ int A,原创 2009-08-14 16:31:00 · 1196 阅读 · 0 评论 -
hdu 1398 Square Coins(母函数,DP)
经典问题。有n种硬币,每种硬币都有不同的价值,若需要组合出总价值m,问有多少种组合方式。 这题中限制硬币价值都是平方数。 用母函数写出来的代码和我用DP写出来的代码长一个样子。#include using namespace std;int c1[305],c2[305],add[18];void init(){ for(int i=1;i<=17;i++)原创 2009-08-14 08:25:00 · 1185 阅读 · 0 评论 -
pku 1061 青蛙的约会(解模线性方程)
#include using namespace std;int exGcd(__int64 a, __int64 b, __int64 &x, __int64 &y){ if (b == 0) { x = 1; y = 0; return a; } __int64 r = exGcd(b, a % b, x, y); __int64 t =原创 2009-08-12 19:51:00 · 690 阅读 · 0 评论 -
扩展欧几里德算法
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <! /* Style原创 2009-08-12 10:55:00 · 1052 阅读 · 0 评论 -
pku 1850 Code(组合数学,DP)
题意:字符串,长度可以是1-26,串中不能有重复的字符,串中的字符必须按增序排列。字母表后的字符大于字母表前的字符,长的字符大于短的字符。给定一个字符串,问这是第几个满足要求的串。 我自己想的是用DP,0ms。做完后看discuss,其实可以直接用组合数学做,因为字母必须递增排列,所以数选好了位置就定了,这样就不是很难。后来回过头来看自己DP的代码,突然觉得和算好组合数C(n,k)原创 2009-08-11 17:21:00 · 880 阅读 · 0 评论 -
pku 2635 The Embarrassed Cryptographer(质数表,高精度)
自己写的,留着以后做求质数表的和高精度除法的模板。#include "math.h"#include using namespace std;int K[35],K_index,L;bool isprime[1000005];void prime(bool a[],int max_n)//生成质数表{ memset(a,1,sizeof(bool)*max_n);/原创 2009-08-10 21:51:00 · 703 阅读 · 0 评论 -
Big Root
国内做题,从来没有用过JAVA。介于北美题对时间卡得没那么紧,而java对大数的操作比较方便,所以练习了一下。题目的意思是,给定exp和bigNum,问是否存在answer,answer的exp次方是bigNum。其中bigNum的范围是1到10^100。有了java的B原创 2011-08-22 13:07:09 · 776 阅读 · 0 评论