hdu 4704 Sum(组合,费马小定理,快速幂)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4704;
这个题很刁是不是,一点都不6,为什么数据范围要开这么大,把我吓哭了,我kao......说笑的,哈哈。
一开始题意没看清(老毛病了),然后就以为用N对1e+9取模,因为给的数的范围为10100000
所以只能开数组模拟。错了一发。后来再看题,发现错了,S(n)代表的是将N分成n个数的合的不同种类。
那么求S(n)的方法就是高中数学老师教的隔板法,有点忘了。隔板法是这样的,如果N为5,那么将5写成5个1隔开,就像这样
1 1 1 1 1,顾名思义隔板法就是在中间空格出放板子,现在最左和最右边放个板子,不是空格出。如过要求S(3);那么就在4个空格中找2个放格子,那么每两块板子
间的1加起来就是所分的数字,比如放在第格和第二格,分的就为1 1 3,而所CN3
就是S(3);那么可的通项Cnk
那么S(1)+S(2)+S(3)+....S(N)=2N-1
所以就是求2N-1(mod)(1e+7);
因为N-1很大所以可以用费马小定理;
费马小定理在p为素数的情况下对任意的整数x都有x^p==x(mod p)
;如果x不能被p整除有x^(p-1)=1(mod p);由于a,b<1e9;所以不能被1e9+7整除, 求出了k[n],则a^k[n]%p=a^(k[n]%(p-1))%p;
证明如下: k[n]=m*(p-1)+d;那么a^k[n]%p=a^[(m*(p-1))+d]%p=(a^[m*(p-1)]%p*a^(d)%p)%p;
由费马小定理可知a^(m*(p-1))%p=1; 而d=k[n]%(p-1);得证;
然后再快速幂就行了。
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<string.h>
6 typedef long long ll;
7 ll fastmi(ll n);
8 using namespace std;
9 ll a[100100];
10 char b[100005];
11 ll c[100100];
12 ll k[100100];
13 const int N=1e9+7;
14 const int M=1e9+6;
15 int main(void)
16 {
17 k[0]=5;
18 k[1]=0;
19 k[2]=0;
20 k[3]=0;
21 k[4]=0;
22 k[5]=0;
23 k[6]=0;
24 k[7]=0;
25 k[8]=0;
26 k[9]=1;
27 ll n,i,j,p,q,l;
28 while(scanf("%s",b)!=EOF)
29 {
30 memset(a,0,sizeof(a));
31 l=strlen(b);
32 ll t=1;
33 for(i=0; i<l; i++)
34 {
35 a[i]=b[l-i-1]-'0';
36 }
37
38 int uu=0;
39 for(i=0; i<l+20; i++)
40 {
41
42
43 a[i]=k[i]+a[i]+uu;
44 uu=a[i]/10;
45 a[i]=a[i]%10;
46 }
47
48 ll ww=1;
49 ll pp=0;
50 for(i=0; i<l+20; i++)
51 {
52 pp=(pp%M+(ww%M*a[i]%M)%M)%M;
53 ww=(ww%M*10%M)%M;
54
55 }//(N-1)modM=(N-1+M)modM,为1e+6;M-1为1e+5;k[]数组存的就为1e+5;
56 ll dd=fastmi(pp);
57 printf("%lld\n",dd);
58 }
59
60 return 0;
61
62
63 }
64
65 ll fastmi(ll n)//快速幂
66 {
67 ll x=1;
68 ll y=2;
69 while(n)
70 {
71 if(n&1)
72 {
73 x=(x%N*y%N)%N;
74 }
75 y=(y%N*y%N)%N;
76 n=n/2;
77 }
78 return x;
79 }
hdu 4704 Sum(组合,费马小定理,快速幂)的更多相关文章
- HDU 4704 Sum( 费马小定理 + 快速幂 )
链接:传送门 题意:求 N 的拆分数 思路: 吐嘈:求一个数 N 的拆分方案数,但是这个拆分方案十分 cd ,例如:4 = 4 , 4 = 1 + 3 , 4 = 3 + 1 , 4 = 2 + 2 ...
- hdu 4704 sum(费马小定理+快速幂)
题意: 这题意看了很久.. s(k)表示的是把n分成k个正整数的和,有多少种分法. 例如: n=4时, s(1)=1 4 s(2)=3 1,3 3,1 2,2 s ...
- hdu 4704 Sum 【费马小定理】
题目 题意:将N拆分成1-n个数,问有多少种组成方法. 例如:N=4,将N拆分成1个数,结果就是4:将N拆分成2个数,结果就是3(即:1+3,2+2,3+1)--1+3和3+1这个算两个,则这个就是组 ...
- HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description Sample Input 2 Sample Outp ...
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
Sum Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...
- hdu 4704(费马小定理+快速幂取模)
Sum Time Limit: 2000/ ...
- 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...
- hdu_4869(费马小定理+快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4869 Turn the pokers Time Limit: 2000/1000 MS (Java/O ...
- BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的 ...
- 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 ...
随机推荐
- 搭建zabbix服务器常见问题解析处理
1. 找不到url 2. 服务器无法处理当前请求,PHP解析出错 3. 服务器无法处理当前请求,权限不足 1. 找不到url 浏览器报错:The requested URL /zabbix/ was ...
- SIG -MESH -1
协议栈 node:成为蓝牙mesh网络中一员的设备被称为节点(Node). 蓝牙mesh规格定义了节点可能拥有的特性.具有这些特性中的一个或多个,即表示节点可以在网络中扮演相应的特殊角色.定义的 ...
- linux系统中安装JDK
安装之前的准备工作 查看系统中之前安装好的JDK java –version rpm -qa | grep java 卸载JDK (以java-1.7.0-openjdk-1.7.0.45-2.4.3 ...
- SpringCloud微服务实战——搭建企业级开发框架(三十):整合EasyExcel实现数据表格导入导出功能
批量上传数据导入.数据统计分析导出,已经基本是系统必不可缺的一项功能,这里从性能和易用性方面考虑,集成EasyExcel.EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项 ...
- 转 android开发笔记之handler+Runnable的一个巧妙应用
本文链接:https://blog.csdn.net/hfreeman2008/article/details/12118817 版权 1. 一个有趣Demo: (1)定义一个handler变量 pr ...
- js调用高德地图API获取地理信息进行定位
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=(需要自 ...
- jQuery节点更新
一.插入子节点 var $newNode1 = $("<p>我是p标签</p>"); 加入之后,原来的会删除. 二.插入兄弟节点 三.替换节点 1.HTML ...
- 第一章-Flink介绍-《Fink原理、实战与性能优化》读书笔记
Flink介绍-<Fink原理.实战与性能优化>读书笔记 1.1 Apache Flink是什么? 在当代数据量激增的时代,各种业务场景都有大量的业务数据产生,对于这些不断产生的数据应该如 ...
- 索引以及Mysql中的索引
一.什么是索引 索引是表的目录,会保存在额外的文件中,针对表中的指定列建立,专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取 ...
- mysql安装 报错解决
换了新电脑,重新安装了一下mysql,安装过程出现了一些错误,在此记录一下: 参考菜鸟教程:https://www.runoob.com/mysql/mysql-install.html 1.下载my ...