8/27训练日记

先是看了几个素数的比较难的题目,,现在还有印象的是那个反素数的题目,题解多用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到,就这几道题我就看不懂,,,有些模板还要打一遍,有时候去看原题也要看很长时间(因为直接看题解,其实他们的题意都是包含了自己对题目的理解,要不然就是直接给出通过题目得出的结论了,很难锻炼自己通过阅读题目了解考什么的能力!

我觉得今天写的博客挺花花挺好玩的哈哈哈,就是色彩有点多难免有种……混乱的感觉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值