zoukankan      html  css  js  c++  java
  • hdu4704 Sum 2013 Multi-University Training Contest 10 数论题

    Sum

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 127    Accepted Submission(s): 60

    Problem Description
     
    Sample Input
    2
     
    Sample Output
    2

    解题思路:

     很容易看得出,这是个组合数学的插板问题,答案为2^(n-1);

    由于n特别大,则(2^(n-1))%1000000007=(2^((n-1)%1000000006))%1000000007;

    因为1000000007为素数,设为p,有2^p=2(%p),即2^(p-1)=1(%p);

    用个大数对小数取模,和快速幂就好了

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <algorithm>
     4 #include <stdlib.h>
     5 #include <string.h>
     6 #include <queue>
     7 #define ll long long int
     8 #define mod 1000000007
     9 #define INF 1000000006
    10 using namespace std;
    11 char a[100010];
    12 int b[100010];
    13 int t;
    14 ll fun()
    15 {
    16     int i,j;
    17     ll sum=0;
    18     for(i=t;i>=0;i--)
    19     {
    20         sum=sum*10+b[i];
    21         sum%=INF;
    22     }
    23     return sum;
    24 }
    25 ll funa(ll sum)
    26 {
    27     if(sum==0)
    28     return 1;
    29     if(sum==1)
    30     return 2;
    31     if(sum&1)
    32     {
    33         ll temp=funa((sum-1)/2);
    34         return temp*temp%mod*2%mod;
    35     }
    36     else
    37     {
    38         ll temp=funa(sum/2);
    39         return temp*temp%mod;
    40     }
    41 }
    42 int main()
    43 {
    44     while(scanf("%s",a)!=EOF)
    45     {
    46         t=strlen(a);
    47         int i,j;
    48         j=0;
    49         memset(b,0,sizeof(b));
    50         for(i=t-1;i>=0;i--)
    51         {
    52             b[j++]=a[i]-'0';
    53         }
    54         for(i=0;i<j;i++)
    55         if(b[i]>0) {b[i]--;break;}
    56         else b[i]=9;
    57         ll res=fun();
    58         cout<<funa(res)<<endl;
    59     }
    60 }
    View Code
  • 相关阅读:
    2.5 进程控制之wait函数
    2.4 进程控制之僵尸进程和孤儿进程
    九、IIC驱动原理分析
    2.3 进程控制之exec函数族
    8.2 USB键盘驱动编写和测试
    1. tty终端接收数据原理
    第3章 MySQL常用增,删,改,查,用户授权,备份,等操作
    Linux命令总结--top命令
    Linux--LNMP
    Linux命令总结-ps pstree pgrep命令
  • 原文地址:https://www.cnblogs.com/ERKE/p/3275711.html
Copyright © 2011-2022 走看看