Project Euler 太好玩了。。。(雾
Problem 675
设 (omega(n)) 表示 (n) 的质因子个数,(S(n)=sum_{d|n}2^{omega(d)}),求 (F(n)=sum_{i=2}^nS(i!) mod (10^9+87))。
(n=10^7)
solution
$n=prod_{i=1}^kp_i^{e_i}$ $S(n)=prod_{i=1}^k(2e_i+1)$ 线性筛求出每个数的最小质因子之后就可以对 $10^7$ 以内的所有数质因数分解了。 时间复杂度 $O(sum_{i=1}^nomega(i))$Problem 225
Tribonacci Number:(T_1=T_2=T_3=1),(T_n=T_{n-1}+T_{n-2}+T_{n-3})。
求第 124 小的奇数 (k) 满足对任意正整数 (n),(k ot|T_n)。
solution
答案很小,暴力即可。Problem 137
设 Fibonacci 的生成函数为 (A_F(x)),若 (xin Q_+) 且 (A_F(x)in N_+),则称 (A_F(x)) 为 Fibonacci golden nuggets。求第 15 小的这样的数。
若 ((c,d)=1),因为 ((cd,c^2-cd+d^2)=(c,c^2-cd+d^2)(d,c^2-cd+d^2)=(c,d^2)(d,c^2)=1),所以 (c^2-cd+d^2=1)。
结论:(x=frac{F_{2n+1}}{F_{2n}})时 (n=F_{2n+1}F_{2n}),其中 (F_n) 是 Fibonacci 数。
证明咕了。。
Problem 330
设
其中 (A(n),B(n)in N),求 ((A(10^9)+B(10^9)) mod 77777777)
设 (b(n)=a(n)-1),则
设 (D(n)=frac{n!b(n)}{e-2}),则
所以 (a(n)=frac{(e-2)D(n)+n!}{n!}),所以 (A(n)=D(n),B(n)=n!-2D(n)).
把 (D(n)) 求出即可。
打表发现,(p) 为质数时,从第 (p) 项开始,(D(n)mod p)的循环节为 (p(p-1)),证明不会。。。
77777777 分解质因数之后使用中国剩余定理合并即可。
Problem 474
题目描述:求 (n!) 的因数中(mod k=m) 的数量。
数据范围:(n=10^6,k=10^5,m=65432)。
这题就是个暴力。
首先把 (le n) 的质数筛出来,把 (n!) 质因数分解,(p) 的指数 (sum_{ige 1} lfloorfrac{n}{p^i} floorle nsum_{ige 1}p^{-i}=frac{n}{p-1})。(f_{i,j})表示只看前 (i) 个质因数,(mod k=j) 的因数数量,直接转移是 (O(knloglog n))的。
这个也可以跑出来,但是会跑死你。
考虑优化,因为 (m) 中 (2) 的次数为 (3),不含 (5) 质因子,且 (k=2^5*5^5),所以只有 (8|j,16 ot|j,5 ot|j) 的 (j) 才是有用的。于是带上了一个 (frac{1}{20}) 的常数。可以在 1min 以内跑过去了。
Problem 608
题目描述:求 (sum_{d|m}sum_{k=1}^nsigma_0(dk))。
数据范围:(m=200!,n=10^{12})。
code
```cpp #includeProblem 362
题目描述:设 (f(n)) 表示把 (n) 分解为一些(ge 2) 的 Squarefree 的数的乘积的形式(无序)的方案数。求 (S(n)=sum_{i=1}^nf(i)).
数据范围:(n=10^{10}).
(当 (mu(n) ot= 0) 时 (n) 称为 Squarefree Number)
由于这个分解式要求无序,所以只能把 (le sqrt n) 的 Squarefree 的数求出来,设为 (k_0,k_1,ldots,k_{c-1}),设 (S(x,y)) 表示只用 (ge k_x) 的数分解 ([k_x,y]) 的数。则有
第一个式子中:(k_x) 分解为 (k_x),然后枚举是否含有 (k_x) 作为其中一个数。
第二个式子中,([k_x,y]) 中的 non-squarefree 的数是不能分解的,必定在之前就被考虑过,而 Squarefree 的不能再分解,所以就是这个式子了。
这东西就是个容斥,枚举 (i^2) 作为它的平方因子。直接 (O(sqrt n)) 做都可以。
顺便再把 (S) 和这个和式给记忆化一下。
时间复杂度并不知道,但是跑个十几秒就出来了。
code
```cpp #includeProblem 562
首先,我连毕克定理都忘了。
面积=内部点+边界点/2-1.
所以就是面积为 (frac{1}{2}) 的三角形。
要求周长最长,所以最长边的两个端点一定离原点比较远。设离原点距离平方 (ge 10^{14}-10^3). 然后用 exgcd 就可以解出第三个点了。
code 明天写。
Problem 490
题目描述:设 (f(n)) 表示长度为 (n) 的排列 (1=p_1,p_2,ldots,p_n=n) 满足 (|p_i-p_{i+1}|=3) 的个数。
求 (S(n)=sum_{i=1}^nf(i)^3 mod p)。
数据范围:(n=10^{14},p=10^9.)
pb 带我把这道题肝出来了。。。
设 (f_n,g_n,h_n) 表示在 (1,2,ldots,n) 的排列中,(1 ightarrow n,2 ightarrow n,3 ightarrow n) 的方案数。
把(推式子->写代码->测样例)不断重复,就可以获得以下的式子:
然后化简:
然而并不知道怎么去掉 (g_n),所以硬上 BM.
所以早就该写个状压
感觉三次方爆拆也是有线性递推式的,所以硬上BM。由于模数是 10^9,所以要求出不取模的值,所以用三个质数算之后使用CRT合并。
递推式系数
``` 7,3,110,657,2152,-3069,-52635,-261302,-153696,1473808,2397069,-311428,15762353,23085711,-47100311,129068460,562670682,851932061,925364934,1130031754,-4818794712,-13912313165,-20035999720,-27503231654,8949378103,10592790453,86984066471,-56538383977,310493682996,-555465996642,1018117858828,-492151027284,2597031578551,-4155106947436,4585759018316,-9918477547884,15345098186233,-16703435094128,14108978306373,-27430610896121,34471508084833,-41664710509024,56721748256014,-66444180626409,72030686017061,-36937223139909,37807899843246,-79005671659204,99579386233244,-91805685058556,53280640807504,-20165321105154,-47200378525336,98926314244247,-29644108051680,-98742930470195,92925853017229,91456358240235,-227581074843374,140985746410706,38693277606439,-71589702321590,-22128540237021,81893506257373,-49141821193336,-2978665835660,11325445924806,-16572398684339,37247712591350,-42178276310845,25148411068672,-8098925759012,1492489231468,-1796923760449,-262361213538,2822570675476,-2009433760337,933638513260,-1282209459128,1230923844512,-565730597095,31120448364,210053308828,-141425154588,43691863656,-81272454172,113172412506,-83602207124,59855112573,-45210437862,28195771570,-13763616116,6190641463,-4427241075,3051495474,-1495697702,760716994,-480886330,299865824,-128022945,40583768,-17920921,6498090,-2262358,2082694,-2003166,925167,-110850,4595,-3599,902,-2625,3642,-2359,285,-1,-7,-1,2,-1,1 ```然后用矩阵做线性递推。
PS:答案有很多个7