zoukankan      html  css  js  c++  java
  • jzoj100027. 【NOIP2017提高A组模拟7.7】表达式

    Description

    在这里插入图片描述

    Input

    一行两个整数k,p。

    Output

    一行一个整数表示答案。

    Sample Input

    1 3

    Sample Output

    6

    Data Constraint

    对于20%的数据:kp<=105k*p<=10^5
    对于另外20%的数据 k=1k=1
    对于70%的数据:kp<=109k*p<=10^9
    对于100%的数据:k,p<=109k,p<=10^9

    题解

    这题一看就是一道不友好的题。
    前%40暴力+打表
    %70题解说:发挥人类智慧。
    然而并不会做
    %100
    解法一:简单自然的找规律,可以发现一些周期或是别的神奇的东东。
    解法二:推式子。
    我们看到题目要求:
    i=1kpi2p1modp2sum_{i=1}^{k*p}i^{2*p-1} mod p^2
    放在前面:我们要推一个前置知识。
    二项式展开:
    (a+b)n=i=0nCnianibi(a+b)^n=sum_{i=0}^{n}C_{n}^{i}*a^{n-i}*b^i

    然后我们要证明:
    i=1p1i2p1p(p+1)/2(modp2)sum_{i=1}^{p-1}i^{2p-1}equiv p(p+1)/2(mod p^2)
    过程:
    i=1p1i2p1+i=1p1i2p1p(p+1)(modp2)sum_{i=1}^{p-1}i^{2p-1}+sum_{i=1}^{p-1}i^{2p-1}equiv p(p+1)(modp^2)

    i=1p1i2p1+i=1p1(pi)2p1p(p+1)(modp2)sum_{i=1}^{p-1}i^{2p-1}+sum_{i=1}^{p-1}{(p-i)}^{2p-1}equiv p(p+1)(modp^2)

    i=1p1i2p1+(pi)2p1p(p+1)(modp2)sum_{i=1}^{p-1}{i}^{2p-1}+{(p-i)}^{2p-1}equiv p(p+1)(modp^2)

    i=1p1i2p1j=02p1C2p1j(i)2p1jpjp(p+1)(modp2)sum_{i=1}^{p-1}{i}^{2*p-1}-sum_{j=0}^{2p-1}C_{2p-1}^j*(-i)^{2p-1-j}*p^{j}equiv p(p+1)(modp^2)

    由于当j>=2时,后面的式子是没有用的“j=02p1C2p1j(i)2p1jpjsum_{j=0}^{2p-1}C_{2p-1}^j*(-i)^{2p-1-j}*p^{j}”(模意义下)
    所以设后面的式子值为:S
    当j=0时S=11i2p1S=-1*1*i^{2p-1}
    当j=1时S=(2p1)i2p2pS=(2p-1)*i^{2p-2}*p
    得到:
    i=1p1i2p1i2p1+(2p1)pi2p2p(p+1)(modp2)sum_{i=1}^{p-1}{i}^{2p-1}-i^{2p-1}+(2p-1)*p*i^{2p-2}equiv p(p+1)(modp^2)

    i=1p1(2p1)pi2p2p(p+1)(modp2)sum_{i=1}^{p-1}(2p-1)*p*i^{2p-2}equiv p(p+1)(modp^2)

    i=1p1(2p1)i2p2p+1(modp)sum_{i=1}^{p-1}(2p-1)*i^{2p-2}equiv p+1(modp)(由于两边同时除p,模数也要除p)

    因为费马小定理:ap11(modp)(p)a^{p-1}equiv 1 (mod p)(p为质数)

    所以i2p2=i2(p1)=(i2)p11(modp)i^{2p-2}=i^{2(p-1)}={(i^2)}^{p-1}equiv 1(modp)

    所以原来就变成了:
    i=1p12p1p+1(modp)sum_{i=1}^{p-1}2p-1equiv p+1(modp)

    (p1)(2p1)p+1(modp)(p-1)(2p-1)equiv p+1(mod p)(去掉西格玛)

    2p24p+11(modp)2p^2-4p+1equiv 1(mod p)(拆出来)
    由于是模p意义下,所以变成了:11(modp)1equiv1(mod p)
    得证。
    那么回到题目:
    i=1kpi2p1modp2sum_{i=1}^{kp}i^{2p-1} mod p^2

    i=1kj=1p[(i1)p+j]2p1modp2sum_{i=1}^{k}sum_{j=1}^{p}[(i-1)*p+j]^{2p-1} mod p^2(拆开西格玛)
    我们发现,可以把(i-1)在前面西格玛替换一下,而且由于j=p时,modp2modp^2为0
    所以变成:
    i=0k1j=1p1(ip+j)2p1modp2sum_{i=0}^{k-1}sum_{j=1}^{p-1}(i*p+j)^{2p-1} mod p^2
    熟悉的二项式展开:
    i=0k1j=1p1[j2p1+(2p1)ipj2p2]modp2sum_{i=0}^{k-1}sum_{j=1}^{p-1}[j^{2p-1}+(2p-1)*i*p*j^{2p-2}] mod p^2
    整理一下:
    i=0k1j=1p1j2p1+i=0k1ij=1p1(2p1)j2p2p(modp2)sum_{i=0}^{k-1}sum_{j=1}^{p-1}j^{2p-1}+sum_{i=0}^{k-1}*i*sum_{j=1}^{p-1}(2p-1)*j^{2p-2}*p (mod p^2)
    左边可以根据上面证明:得i=0k1p(p+1)/2=kp(p+1)/2sum_{i=0}^{k-1}p(p+1)/2=kp(p+1)/2
    右边可以根据上面证明过程中的结论化简,得:
    i=0k1ip(p+1)=k(k1)p(p+1)/2sum_{i=0}^{k-1}*i*p*(p+1)=k*(k-1)*p*(p+1)/2
    那么答案就是:kp(p+1)/2+k(k1)p(p+1)/2(modp2)kp(p+1)/2+k*(k-1)*p*(p+1)/2( mod p^2)
    化简:k2p(p+1)/2(modp2)k^2*p*(p+1)/2(mod p^2)
    用快(gui)速乘解决即可。

    var
            i,j,k,l,n,m:longint;
            p,q,ans,answer,mo:int64;
    function tsm(a,b:int64):int64;
    var
            i,j,k,l:int64;
    begin
            l:=0;
            while b>0 do
            begin
                    if b and 1>0 then l:=(l+a) mod mo;
                    b:=b div 2;
                    a:=(a*2) mod mo;
            end;
            exit(l);
    end;
    begin
            readln(q,p);
            mo:=p*p;
            writeln(tsm(tsm(tsm(q,q),p),(p+1) div 2));
    end.
    
    我活在这夜里。无论周围多么黑暗,我都要努力发光!我相信着,终有一天,我会在这深邃的夜里,造就一道最美的彩虹。
  • 相关阅读:
    000-ESP32学习开发(SDK)-ESP32开发板使用说明
    2-STM32 替换说明-CKS32, HK32, MM32, APM32, CH32, GD32, BLM32, AT32(推荐), N32, HC华大系列
    002-CH579M学习开发-官方资料学习说明,开发板蓝牙(蓝牙定位),网口通信测试
    001-CH579M学习开发-硬件使用说明,下载和运行第一个程序
    STM32+CH395Q(以太网)基本控制篇(自建物联网平台)-硬件使用说明
    17-网络芯片CH395Q学习开发-片内EEPROM读写实验
    16-网络芯片CH395Q学习开发-低功耗实验
    15-网络芯片CH395Q学习开发-DNS 域名解析
    14-1-网络芯片CH395Q学习开发-WEB服务器-网页到底是啥, web服务器是啥, 网页如何显示的显示图片和视频
    13-网络芯片CH395Q学习开发-模块使用Socket0作为MAC RAW
  • 原文地址:https://www.cnblogs.com/RainbowCrown/p/11148388.html
Copyright © 2011-2022 走看看