洛谷p3764签到题3

来源:互联网 发布:淘宝店流量是什么意思 编辑:程序博客网 时间:2024/06/15 13:42

好像每次洛谷月赛T1都是所谓的签到题,然而并不是很简单。开场我暴力打表找规律,75分钟1A。这是官方题解,然而zzq神犇不会(不屑于)证明,我证一下。

首先,对于满足(a,b)=1的二元组a,bm=a+b,则无论是a,b变成2a,ba还是ab,2b,都相当于模m意义下,a,b变成2a,2b
然后,设k次操作后变成(2ka,2kb),且2ka2kb(modm),则2k(ab)0(modm)
因为(a,b)=1,所以(a,a+b)=1,即(a,m)=1
因为ab(modm),所以代入2k(ab)0(modm)2k2a0(modm)
因为a0,所以2k20(modm),所以m必为2的幂次。

lyx大佬说这个结论是显然的,我却还要写下来,果然是我太渣了。

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<queue>#include<set>#include<map>#include<vector>#include<list>#include<fstream>#include<cmath>#include<cctype>#include<stack>#include<cstdlib>#include<ctime>using namespace std;typedef long long ll;typedef unsigned int ui;ll n,i,j,d,ans,k;int main(){    //freopen("aa1.txt","r",stdin);    cin>>n;    for(d=2;;d<<=1){        for(i=(d>>1)+1;i<d && i<=n;){            j=n/(n/i);            if(j>d)j=d-1;            if(j>n)j=n;            if(!(j&1))--j;            ans+=k*(n/i)*(((j-i)>>1)+1);            i=j+2;        }        //cout<<ans<<endl;        ++k;        if(d>=n)break;    }    cout<<ans*2;    return 0;}
0 0
原创粉丝点击