POJ2480
    题目要求计算Σgcd(i,n)。

    需要用到的定义:
    [积性函数]
    在非数论的领域,积性函数指所有对于任何a,b都有性质f(ab)=f(a)f(b)的函数。
    在数论中的积性函数:对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数。若对于某积性函数 f(n) ,就算a, b不互质,也有f(ab)=f(a)f(b),则称它为完全积性的。
    常见的积性函数:φ(n)、gcd(i,n)
    [欧拉函数]
    在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。
    φ函数通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)...(1-1/pn)
    若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1)

    已知gcd(i,n)为积性函数。由具体数学上的结论,积性函数的和也为积性,所以f(n)=Σgcd(i,n)也为积性函数。 f(n)=f(p1^a1)*f(p2^a2)*...*f(pk^ak)(pi表示n的一个质因数,ai表示它的指数),所以只要求出 f(pi^ai)。
f(pi^ai)=φ(pi^ai)+pi*φ(pi^(ai-1))+...+pi^a1*φ(1)
=pi^(ai-1)*(pi-1) + pi*pi^(ai-2)*(pi-1)....+pi^ai
=pi^ai*(1+ai*(1-1/pi))
f(n)=[p1^a1*p2^a2*...*pk^ak]*[(1+a1*(1-1/p1))*(1+a2*(1-1/p2))*...]
=n*(1+a1*(1-1/p1))*(1+a2*(1-1/p2))*...
    所以只需对于每一个pi计算ans*(1+ai*(1-1/pi))。


POJ2368
    要求保证一定能胜利的最小答案,则需要找到一个最小的k,使得n mod k=0。由于L最小是2,所以需要从3到sqrt(n)枚举答案。如果这样还没解,就说明答案为与不符合要求的2对应的那个因数。注意n=4的情况。


POJ1742
    用传统的O(NM*C)的算法必然超时,我们可以对此进行优化。用num[i]来记录当前物品装出来价值为i的情况时最少需要几个,通过num[i]来限制物品个数,可以将复杂的控制在O(NM)。此方法只适用于判断某状态能不能凑出。

posted on 2012-08-12 17:03  Minty  阅读(183)  评论(0)    收藏  举报