zoukankan      html  css  js  c++  java
  • hdu 4704 同余定理+普通快速幂

    此题往后推几步就可找到规律,从1开始,答案分别是1,2,4,8,16....

    这样就可以知道,题目的目的是求2^n%Mod的结果.....此时想,应该会想到快速幂...然后接着会发现,由于n的值过大,很容易就会T掉...

    所以这个时候就想到找规律...试试就可以知道,1e9+6的时候是循环节...

    然后用同余定理,把余数求出来就可以了...

    #include<iostream>  
    #include<string>  
    #include<string.h>  
    #include<cstdio>  
    #include<algorithm>  
    using namespace std;  
    #define Mod 1000000007
    __int64 quick_pow(__int64 m,__int64 n)
    {
        __int64 ans=1;
        while(n){
            if(n&1) 
                ans=(ans*m)%Mod;
            n=n>>1;
            m=(m*m)%Mod;
        }
        return ans;
    }
    
    
    int main()  
    {  
        __int64 N, i, num, len;  
            char str[1000010];  
            while(~scanf("%s", str)){  
             num = 0;  
            len = strlen(str);  
            for(i = 0; i != len; ++i)  //同余定理
            {  
                num = (num * 10 + (int)(str[i] - '0')) % 1000000006;   
            }  
            __int64 ans;
            if(num==0){
    		printf("%I64d
    ",quick_pow(2,Mod-2));
    		}
    		else{
      		num--;
    		ans=quick_pow(2,num);
            printf("%I64d
    ",ans);  
    		}
    		}
        return 0;  
    }  
    


  • 相关阅读:
    02.v-on的事件修饰符
    01.Vue的系统指令
    00-Vue的介绍和vue-cli
    vs code快捷键
    分库分表之后,主键的处理方法
    动态扩容分库分表
    前端web通过flask操作数据库-增删改查
    mysql组复制集群简介
    vsftp进阶-锁定目录
    kvm克隆
  • 原文地址:https://www.cnblogs.com/riskyer/p/3275421.html
Copyright © 2011-2022 走看看