题意:

这题意看了很久。。

s(k)表示的是把n分成k个正整数的和,有多少种分法。

例如:

n=4时,

s(1)=1     4

s(2)=3     1,3      3,1       2,2

s(3)=3     1,1,2         1,2,1       2,1,1

s(4)=1       1,1,1,1

s(1)+s(2)+s(3)+s(4)=1+3+3+1=8

当n=1,2,3,4时,可以分别求出结果为    1,2,4,8

于是推出答案就是2^(n-1)---------------------(为什么?我也不知道,这个是怎么推出来的)

思路:题意明白了,就是求2^(n-1)    mod(10^9+7)呗。

由于这里的n非常大,1<=n<10^100000,这里用简单的暴力绝对超时啊(10^8就会超时)

那么,这里用了两个优化,一个是费马小定理 a^(p-1)≡1(mod p),另外就是快速幂加速求幂

这里稍微演示一下如何利用费马小定理处理:

(单单用费马小定理处理仍会超时,因为处理完后,指数最大能达到10^9级别,仍会超时)

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mod=1e9+7; void pow(__int64 b){//快速求幂(位操作)
__int64 a=2;
__int64 ans;
ans=1;
while(b>0){
if(b&1)//判断是否为奇数,相当于 if(b%2==1)
ans=(ans*a)%mod;
a=(a*a)%mod;
b=b>>1;//二进制向右移一位,相当于 b=b/2;
}
printf("%I64d\n",ans);
} int main(){
char str[123456];
__int64 num,i;
while(~scanf("%s",str)){
num=0;
int len=strlen(str);
for(i=0;i<len;i++){
num=( num*10+(str[i]-'0') )% (mod-1);//精华部分
}
if(num==0) pow(mod-2);//此时n=mod-1,所以应该求pow(mod-2),而不能求成pow(num-1)
else pow(num-1);
}
return 0;
}

hdu 4704 sum(费马小定理+快速幂)的更多相关文章

  1. hdu 4704 Sum 费马小定理

    题目链接 求2^n%mod的值, n<=10^100000. 费马小定理 如果a, p 互质, 那么a^(p-1) = 1(mod p)  然后可以推出来a^k % p = a^(k%(p-1) ...

  2. 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum

    Sum Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...

  3. HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)

    题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description   Sample Input 2 Sample Outp ...

  4. HDU 4704 Sum( 费马小定理 + 快速幂 )

    链接:传送门 题意:求 N 的拆分数 思路: 吐嘈:求一个数 N 的拆分方案数,但是这个拆分方案十分 cd ,例如:4 = 4 , 4 = 1 + 3 , 4 = 3 + 1 , 4 = 2 + 2 ...

  5. hdu 4704(费马小定理+快速幂取模)

    Sum                                                                                Time Limit: 2000/ ...

  6. 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)

    题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...

  7. hdu_4869(费马小定理+快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4869 Turn the pokers Time Limit: 2000/1000 MS (Java/O ...

  8. BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的 ...

  9. hdu4549(费马小定理 + 快速幂)

    M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n ...

随机推荐

  1. 【工具类】Date、Long、String 类型互转

    开发常常遇到Date.Long.String 三种类型数据须要互转的问题.以此记录. public static void main(String[] args) throws ParseExcept ...

  2. 使用FDTemplateLayout框架打造个性App

    效果展示 project下载地址 · 进入构建结构 首先我们新建一个project 接下来我们拖进来一个Table View Controller,将Storyboard Entry Point指向我 ...

  3. UML类图简明教程

    作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...

  4. SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  5. EntityFramework 6.0 修改一个已经存在的对象

    public void UpdateObj(someobject obj) { db.Entry(obj).State = EntityState.Modified; db.SaveChanges() ...

  6. 09-利用session完成用户登陆

    /***********************************************login.html*****************************************/ ...

  7. 开启Java远程调试

    在JDK启动时,加入 -Xrunjdwp:transport=dt_socket,address=9900,server=y,suspend=n -Dcom.sun.management.jmxrem ...

  8. 史上最浅显易懂的Git教程1

    工作区(Working Directory)就是你在电脑里能看到的目录, 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stag ...

  9. gdb ../sysdeps/i386/elf/start.S: No such file or directory

    使用 gdb 调试的时候 输入 l 之后出现下列信息 (gdb) l 1 ../sysdeps/i386/elf/start.S: No such file or directory. in ../s ...

  10. Fragment 生命周期:

    Fragment每个生命周期方法的意义.作用(注意红色的不是生命周期方法):setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法.在该方法里面可以通过调用getU ...