HDU 5597 GTW likes function

8 篇文章 0 订阅

题意:

现在给出下列两个定义:
	f(x)=f_{0}(x)=\sum_{k=0}^{x}(-1)^{k}2^{2x-2k}C_{2x-k+1}^{k},f_{n}(x)=f(f_{n-1}(x))(n\geq 1)f(x)=f0(x)=k=0x(1)k22x2kC2xk+1k,fn(x)=f(fn1(x))(n1)

	\varphi(n)φ(n)为欧拉函数。指的是不超过nn的与nn互质的正整数个数。

对于每组数据,GTW有两个正整数n,xn,x,现在他想知道函数\varphi(f_{n}(x))φ(fn(x))的值。

其实就是喊我们先去找这个函数的规律,然后再带入欧拉函数就可以咯。

但是我没有找到规律,本来我是想乱猜的。但是放弃了。

官方证明:

由打表找规律可得,\sum_{k=0}^{x}(-1)^{k}2^{2x-2k}C_{2x-k+1}^{k}=x+1k=0x(1)k22x2kC2xk+1k=x+1,所以显然f_n(x)=n+x+1fn(x)=n+x+1,因此直接求\varphi(n+x+1)φ(n+x+1)。时间效率O(T\sqrt{n})O(Tn)

严格证明:

a_n=\sum_{k=0}^{n}(-1)^k2^{2n-2k}C_{2n-k+1}^kan=k=0n(1)k22n2kC2nk+1k

a_n=2^{2n}+\sum_{k=1}^{n}(-1)^k2^{2n-2k}(C_{2n-k}^k+C_{2n-k}^{k-1})=\sum_{k=0}^{n}(-1)^k2^{2n-2k}C_{2n-k}^k+\sum_{k=0}^{n-1}(-1)^{k+1}2^{2(n-1)-2k}C_{2(n-1)-k+1}^kan=22n+k=1n(1)k22n2k(C2nkk+C2nkk1)=k=0n(1)k22n2kC2nkk+k=0n1(1)k+122(n1)2kC2(n1)k+1k

b_n=\sum_{k=0}^{n}(-1)^k2^{2n-2k}C_{2n-k}^kbn=k=0n(1)k22n2kC2nkk,则b_n=a_n+a_{n-1}bn=an+an1

b_n=2^{2n}+\sum_{k=1}^{n-1}(-1)^k2^{2n-2k}(C_{2n-k-1}^k+C_{2n-k-1}^{k-1})+(-1)^nbn=22n+k=1n1(1)k22n2k(C2nk1k+C2nk1k1)+(1)n

=4\sum_{k=0}^{n-1}(-1)^k2^{2(n-1)-2k}C_{2(n-1)-k+1}^k+\sum_{k=0}^{n-1}(-1)^{k+1}2^{2(n-1)-2k}C_{2(n-1)-k}^k=4k=0n1(1)k22(n1)2kC2(n1)k+1k+k=0n1(1)k+122(n1)2kC2(n1)kk

=4a_n-b_{n-1}=4anbn1

a_n-a_{n-1}=a_{n-1}-a_{n-2}anan1=an1an2。因为a_0=1,a_1=1a0=1,a1=1,所以a_n=n+1an=n+1

证明比较费时,打表找规律能很快的得出解,所以本题的关键在于打表找规律。

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;
long long f(long long n)
{
    long long cnt=n;
    for(long long i=2; i*i<=n; i++)
    {
        if(n%i==0)
        {
            cnt-=cnt/i;
            while(n%i==0)
                n/=i;
        }
    }
    if(n>1)
        cnt-=cnt/n;
    return cnt;
}
int main()
{
    long long n,x;
    while(~scanf("%lld",&n))
    {
        printf("%lld\n",f(n));
    }
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值