• C


    Read the program below carefully then answer the question. 
    #pragma comment(linker, "/STACK:1024000000,1024000000") 
    #include <cstdio> 
    #include<iostream> 
    #include <cstring> 
    #include <cmath> 
    #include <algorithm> 
    #include<vector> 

    const int MAX=100000*2; 
    const int INF=1e9; 

    int main() 

      int n,m,ans,i; 
      while(scanf("%d%d",&n,&m)!=EOF) 
      { 
        ans=0; 
        for(i=1;i<=n;i++) 
        { 
          if(i&1)ans=(ans*2+1)%m; 
          else ans=ans*2%m; 
        } 
        printf("%d ",ans); 
      } 
      return 0; 
    }

    InputMulti test cases,each line will contain two integers n and m. Process to end of file. 
    TechnicalSpecification 
    1<=n, m <= 1000000000OutputFor each case,output an integer,represents the output of above program.Sample Input

    1 10
    3 100

    Sample Output

    1
    5

    等比数列二分求和:

    (1)时,

    (2)时,那么有

        

    (3)时,那么有

        

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<sstream>
    #include<algorithm>
    #include<queue>
    #include<deque>
    #include<iomanip>
    #include<vector>
    #include<cmath>
    #include<map>
    #include<stack>
    #include<set>
    #include<fstream>
    #include<memory>
    #include<list>
    #include<string>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    #define MAXN 18
    #define N 33
    #define MOD 10000007
    #define INF 1000000009
    const double eps = 1e-9;
    const double PI = acos(-1.0);
    LL n, m, ans;
    /*
    等比数列二分求和
    */
    LL fpow(LL a, LL b)
    {
        LL ret = 1, tmp = a;
        while (b != 0)
        {
            if (b & 1)
                ret = ret*tmp%m;
            tmp = tmp*tmp%m;
            b /= 2;
        }
        return ret%m;
    }
    LL sum(LL a, LL k)
    {
        LL t, cur;
        if (k == 1)
            return a;
        else if (k % 2 == 1)
        {
            t = sum(a, k / 2),cur = fpow(a, k / 2 + 1);
            t = (t + t * cur%m) % m;
            t = (t + cur) % m;
        }
        else
        {
            t = sum(a, k / 2), cur = fpow(a, k / 2);
            t = (t + t * cur % m) % m;
        }
        return t;
    }
    LL solve(LL num)
    {
        if (num == 0)
            return 1;
        else
            return (1 + sum(4, num)) % m;
    }
    int main()
    {
        while (cin >> n >> m)
        {
            if (n & 1)
                cout << solve(n/2)%m << endl;
            else
                cout << solve((n - 1)/2)*2%m << endl;
        }
    }


  • 相关阅读:
    20180530
    vue路由配置出错,导致页面跳转会有闪屏问题
    20180528
    vuecli+ivew项目搭建
    centos6安装mysql
    华为云服务ESC
    centos6安装nginx
    国产操作系统aarch64编译filebeat
    Python常见问题
    Git
  • 原文地址:https://www.cnblogs.com/joeylee97/p/7237849.html
Copyright © 2020-2023  润新知