ACM训练半周总结—11月23日

         从这个半周开始我越来越觉得做的题太少,也可能是方法有问题,周四做的训练赛就感觉能做出来的题就是卡住了,那个D题,其实就是个二分处理,但我就是没能快速做出,一直纠结在使用尺取法做,然而对尺取法不熟悉,就。。。C题,A题貌似也是水题。从现在开始,cf和vj上有的比赛必须都打。不能再倒退了!!!

       另外整理下数论2专题的题目吧。

        Q题:已知f(0) = 1,0^0 =1,还已知f(n) = (n%10)^f(n/10),让你求f(n)%m. (2 ≤ n , m ≤ 10^9)

这个题其实很快就能想到那个公式:   a^b%p=a^(b%phi(p)+phi(p))%p   b>=phi(p)  这个公式之前一直没注意b>=phi(p)这个条件,所以这次快速幂要做一些变化,保证这个公式可以用。

ll pow_mod(ll a, ll n, ll m)
{
    ll res = 1;
    while(n)
    {
        if(n&1)
        {
            res = res*a;
            if(res>= m)
            res=res%m+m;
        }
        a = a*a;
        if(a >= m)
            a = a%m+m;//保证a>=m,使公式成立
        n >>= 1;
    }
    return res;
}

ll check(int a,int b,int p)  //转载http://blog.csdn.net/qiqijianglu/article/details/7837836,感觉这么写更明晰一些。
{  
    ll res=1;  
    for(int i=1;i<=b;i++)  
    {  
        res*=a;  
        if(res>=p) return res;  
    }  
    return res;  
}  
ll dfs(int n,int m)  
{  
    ll phi=get_phi(m);  
    if(n<10)  
    return n;  
    ll x=dfs(n/10,phi);  
    ll yy=check(n%10,x,m);  
    if(yy>=m)  //只有此时符合公式条件。
    {  
        ll res=powermod(n%10,x+phi,m);  
        if(res==0)  
        res+=m;  
        return res;  
    }  
    else  
    return yy;  
}  

      R题:X题:(因为只有所有因子互素的时候才能用中国剩余定理)都是利用扩展欧几里得算法求二元模线性方程组。

将前两个合并ax1-bx2=r1-r2,用扩展欧几里得算法求出x,进而得到X=a*x+r1,构造r1=X,a1=lcm(a,b),得Y%a1=r1,继续与下面的合并,就这么做出来。很明显, 新构造的方程满足前两个的解。

       还没把题目都总结完,剩下的明天更吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值