先是看了几个素数的比较难的题目,,现在还有印象的是那个反素数的题目,题解多用dfs深搜,书上的解题方法很少有人用,,
欧拉函数先看了两道需要模板的水题,,真的水,也就让我熟悉了一下模板。最后一句:
ans=ans*n/(n-1);//容易忘
然后第一个不是水题的题我就过不了了!!虽然题意跟欧拉函数很挂钩,但是实际上与他并没有什么关系emmm
~~~~~~~~~~~欧拉函数~~~~~~~~~~~
总结:菜鸡水平的题目中
第一重点,能看出属于欧拉函数,要点词汇:互质、最大公约数为1……(剩下的尚未发现)
次重点在于模板,求n的欧拉函数,求1~n的欧拉函数
题1:pku2773 Happy 2006
长了一副欧拉函数题目的它并不是用欧拉函数来算,很遗憾。题解
坑1* 第k个与n互质的数字,不一定比n小,所以欧拉函数在这里就宣布破产了(比n大的时候就是前面的那些数加上n的倍数,嗯,这个思想很厉害)
坑2* 与n互质,但是不一定是质因子,欧拉函数又不行,所以这个题目啊,为什么在欧拉函数那里啊???
所以啊,,,还是暴力吧,,,,这算什么好题T^T,可能就是为了纪念一下,不能单单看着像那个算法就死磕在算法上了,要看看是否真正的符合那个算法(但是还有算法还能变形,,,so,what can i do?)。
好题~pku2478 Farey Sequence
本来以为啊,就是一个欧拉函数打表在加和的问题,没想到啊,居然超时……应该是超在打表那,根据计算时间正好有1e9。。。哎本来像try try,呵,还是找别的快速求欧拉函数的方法吧,难点应该就在这儿。
课本上有这个模板的!!我没记住。。。总之,这个快
void init(int N)
{
int i, j;
for(i=2;i<=N;i++)
phi[i]=i;
for(i=2;i<=N;i++)
{
if(i==phi[i]) //此时i为素数
{
for(j=i;j<=N;j+=i) //j累加i
{
phi[j] =(phi[j]/i)*(i - 1); //j有因子i,而且i是素数,正是欧拉函数
}
}
}
}
算sum时忘记社成long long,很难受,,,wa了好几次。
所以这还是一个模板水题咯???我就是个菜鸡啊!!菜死了!!!
***poj 3358 Period of an Infinite Binary Expansion
题目都看不懂的问题。。。好像蛮厉害的。。。还是先放放吧,反正我也做不出来:http://poj.org/problem?id=3358
~~~~~~~~~~~~组合数题~~~~~~~~~~~~~
要点总结,求组合数的因子数,so,阶乘分解十分重要,超级重要!!
还有阶乘怎么解:拆开的写法循环(常见,因为这个可以阶乘分解)、乘法逆元(需要取模)、递推公式(慢!)
这里的代码一般都很常。。。要有耐心
取模---->也要用因子,,总之看的这些题,可能有点偏,大部分都要用到因子:阶乘分解!!
pku2992 divisors
好像是很卡时间的一道题,直接让我的暴力思想还没萌芽就死翘翘了。题目短可是好难做的感觉,因为这道题对我真的很难,所以我就多记一点啦。
定理:设正整数n的所有素因子分解n=(p1^a1)*(p2^a2)*(p3^a3)*……*(Ps^as),那么T(n)=(a1+1)*(a2+1)*(a3+1)*……*(an+1);(求因子的个数的公式)
所以要求出质因子and个数就可以带公式。
组合计数->阶乘->阶乘分解质因子(所以组合的就是要求n!、m!、(n-m)!各因子,再求总的):
N!中质因子p的个数为下方公式,或者用求因子的模板(如下面的代码):
ci=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n]
①预处理打表:范围内所有的素数,num记录个数
②求阶乘中,各因子个数:
void slove(int x,int y){//x表示阶乘数字,y作为分子为1,分母为-1,分母分子约分??
for (int i = 0; i < num; i++){//从因子个数遍历每一个因子
int cc = 0,p = f[i];
while(x/p){//对于每一个因子,求出因子的个数
cc += x/p;//这个因子的个数
p*=f[i];//因为不用n/p这一步,所以改变p,这样求个数
}
c[i] = c[i] + y*cc;//分母的y都是-1,约分鸭
}
}
③带求因子个数的公式
***fzu1753 Another Easy Problem
C(n1,m1)==0 (mod M)->M是c(n1,m1)的约数。
所以一系列C的最大的M—>一系列C的最大公约数!
然后这个题我还是不会???题解那一句“然后求出每个素因子在公约数中最小的阶,相乘得到答案。”实在看不懂。
hit 2813 Garden visiting 求C(a,b)%m m任意 a,b,p
除法不能用取模计算->乘法逆元、普通的拆开写分子分母(大多数,记得分子分母约分)->算出pi^ci
取模->拆开写之后相当于每一个因子pi^ci都%m。。(用快速幂)
解决
pku3101 Astronomy
圆周追击问题+求最小公倍数。(数学的部分占比重很大)
圆周追击:两个球角度差为Π就在同一直线,并且(角速度)w=a(转过的角度)/t(所用的时间)。所以,w1*t-w2*t=Π时,在同一直线上,w=2Π/a(a为周期)。
所以,(2Π/a - 2Π/b)* t=Π,所以就有 t=ab/(2|a-b|)。
值的最小公倍数->所求。
不知道哪来的定理1:
如果分数的分子分母分别是 a1, a2, ...., 和 b1, b2, ....,那么所有分数的最小公倍数就是lcm(a1, a2, ...)/gcd(b1, b2,....);
这里好想要用高精度处理哎,不会
明天看拓展欧几里得、线性同余方程跟中国剩余定理鸭~
其实我看的题。。。一天真的看不到50到,就这几道题我就看不懂,,,有些模板还要打一遍,有时候去看原题也要看很长时间(因为直接看题解,其实他们的题意都是包含了自己对题目的理解,要不然就是直接给出通过题目得出的结论了,很难锻炼自己通过阅读题目了解考什么的能力!
我觉得今天写的博客挺花花挺好玩的哈哈哈,就是色彩有点多难免有种……混乱的感觉。