• ACM-ICPC 2018 焦作赛区网络预赛G Give Candies(欧拉降幂)


    题意:给你n个东西,叫你把n分成任意段,这样的分法有几种(例如3:1 1 1,1 2,2 1,3 ;所以3共有4种),n最多有1e5位,答案取模p = 1e9+7

    思路:就是往n个东西中间插任意个板子,所以最多能插n - 1个,所以答案为2^(n - 1) % p。直接套用模板

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #define ll long long
    #define N 1000100
    using namespace std;
    char b[N];
    ll p[N];
    ll a, c;
    ll quick(ll a, ll b){ //快速幂
        ll k = 1;
        while(b){
            if(b%2==1){
                k = k*a;
                k %=c;
            }
            a = a*a%c;
            b /=2;
        }
        return k;
    }
    void priem(){
        memset(p, 0, sizeof(p));
        ll i, j;
        p[1] = 1;
        for(i=2; i<=sqrt(N); i++){
            for(j=2; j<=N/i; j++)
                p[i*j] = 1;
        }
    }
    ll ola(ll n){ //欧拉函数
        ll i, j, r, aa;
        r = n;
        aa = n;
        for(i=2; i<=sqrt(n); i++){
            if(!p[i]){
                if(aa%i==0){
                    r = r/i*(i-1);
                    while(aa%i==0)
                        aa /= i;
                }
            }
        }
        if(aa>1)
            r = r/aa*(aa-1);
        return r;
    }
    int main(){
        ll d, i, j;
        priem();
        a=2;c=1e9+7;
        int T;
        cin>>T;
        while(T--){
            scanf("%s",b);
            b[strlen(b)-1]--;
            ll l = strlen(b);
            ll B=0;
            ll oc = ola(c);
          //  cout<<"oc = "<<oc<<endl;
            for(i=0; i<l; i++){
                B = B*10+b[i]-'0';
                if(B>oc)
                    break;
            }
            //cout<<i<<endl;
            if(i==l)
                d = quick(a,B);
            else{
                B=0;
                for(i=0; i<l; i++){ //降幂
                    B = (B*10+b[i]-'0')%oc;
                }
                d = quick(a,B+oc);
            }
          //  printf("B= %I64d
    ",B);
            printf("%d
    ",d);
        }
        return 0;
    }
  • 相关阅读:
    二分查找LintcodeNo14
    二次排序LincodeNo.846
    github常用操作
    ubuntu18.04 Testlink安装 配置
    树莓派4B安装ffmpeg
    ubuntu18.04下基于XAMPP的Testlink安装部署
    使用rsync同步服务器和NFS数据
    Pandas Cheat Sheet
    【转】Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)
    gitlab cd ci
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9652191.html
Copyright © 2020-2023  润新知