HDU 5793 A Boring Question 多校训练
∑0≤k1,k2,⋯km≤n∏1⩽j<m(kj+1kj)%1000000007=?∑0≤k1,k2,⋯km≤n∏1⩽j<m(kj+1kj)%1000000007=?
We define that (kj+1kj)=kj+1!kj!(kj+1−kj)!(kj+1kj)=kj+1!kj!(kj+1−kj)! . And (kj+1kj)=0(kj+1kj)=0 while kj+1<kjkj+1<kj.
You have to get the answer for each nn and mm that given to you.
For example,if n=1n=1,m=3m=3,
When k1=0,k2=0,k3=0,(k2k1)(k3k2)=1k1=0,k2=0,k3=0,(k2k1)(k3k2)=1;
Whenk1=0,k2=1,k3=0,(k2k1)(k3k2)=0k1=0,k2=1,k3=0,(k2k1)(k3k2)=0;
Whenk1=1,k2=0,k3=0,(k2k1)(k3k2)=0k1=1,k2=0,k3=0,(k2k1)(k3k2)=0;
Whenk1=1,k2=1,k3=0,(k2k1)(k3k2)=0k1=1,k2=1,k3=0,(k2k1)(k3k2)=0;
Whenk1=0,k2=0,k3=1,(k2k1)(k3k2)=1k1=0,k2=0,k3=1,(k2k1)(k3k2)=1;
Whenk1=0,k2=1,k3=1,(k2k1)(k3k2)=1k1=0,k2=1,k3=1,(k2k1)(k3k2)=1;
Whenk1=1,k2=0,k3=1,(k2k1)(k3k2)=0k1=1,k2=0,k3=1,(k2k1)(k3k2)=0;
Whenk1=1,k2=1,k3=1,(k2k1)(k3k2)=1k1=1,k2=1,k3=1,(k2k1)(k3k2)=1.
So the answer is 4.
InputThe first line of the input contains the only integer TT,(1≤T≤10000)(1≤T≤10000)
Then TT lines follow,the i-th line contains two integers nn,mm,(0≤n≤109,2≤m≤109)(0≤n≤109,2≤m≤109)
OutputFor each nn and mm,output the answer in a single line.Sample Input
2
1 2
2 3
Sample Output
3
13 根据题意可以推出公式
∑0≤k1,k2,⋯km≤n∏1⩽j<m(kj+1kj)%1000000007= m^0 + m^1 + m^2 + ... + m^n = ( pow(m,n+1) - 1 / m - 1 ) % mod;
注意这个题目中是除法后取余,所以取余要用逆元取余
下面贴出两种可以用逆元取余的方法
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<stack>
#define mod 1000000007
using namespace std;
typedef long long ll;
ll qow(ll a,ll b) {
ll ans = ;
while( b ) {
if( b& ) {
ans = ans*a%mod;
}
a = a*a%mod;
b /= ;
}
return ans;
}
int main() {
ll T;
cin >> T;
while( T -- ) {
ll n,m;
cin >> n >> m;
ll sum = ,num=;
if( n == ) {
cout << sum << endl;
continue;
}
num = (qow(m,n+)-)*qow(m-,mod-)%mod; //费马小定理的求法
/*用qow(m-1,mod-2)对m-1进行逆元取余*/
cout << num << endl;
}
return ;
}
#include <cstdio>
#include <cmath>
#define MAX 100005
#define mod 1000000007 using namespace std; long long multi(long long a, long long b)//快速幂
{
long long ret = ;
while(b > )
{
if(b & )
ret = (ret * a) % mod;
a = (a * a) % mod;
b >>= ;
}
return ret;
} long long exgcd(long long a, long long b, long long &x, long long &y)//扩展欧几里得
{
if(!b)
{
x = ;
y = ;
return a;
}
long long d = exgcd(b, a % b, x, y); long long tmp = x;
x = y;
y = tmp - a / b * y; return d;
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
long long n, m, x, y;
scanf("%lld %lld", &n, &m);
long long mul = (multi(m, n + ) - ) % mod;
long long d = exgcd(m - , mod, x, y);//若这里mod的位置填写mod * (m - 1),最终计算时需要让x和mod都除以d
x *= mul;
x /= d;//因为m - 1和mod是互质的,这句可以去掉。
x = (x % mod + mod) % mod;//防止最终结果为负数
printf("%lld\n", x);
}
return ;
}
HDU 5793 A Boring Question 多校训练的更多相关文章
- HDU 5793 - A Boring Question
HDU 5793 - A Boring Question题意: 计算 ( ∑(0≤K1,K2...Km≤n )∏(1≤j<m) C[Kj, Kj+1] ) % 1000000007=? (C[ ...
- HDU 5793 A Boring Question (逆元+快速幂+费马小定理) ---2016杭电多校联合第六场
A Boring Question Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- hdu 5793 A Boring Question(2016第六场多校)
A Boring Question Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5793 A Boring Question (找规律 : 快速幂+逆元)
A Boring Question 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5793 Description Input The first l ...
- HDU 5793 A Boring Question (找规律 : 快速幂+乘法逆元)
A Boring Question Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5793 A Boring Question ——(找规律,快速幂 + 求逆元)
参考博客:http://www.cnblogs.com/Sunshine-tcf/p/5737627.html. 说实话,官方博客的推导公式看不懂...只能按照别人一样打表找规律了...但是打表以后其 ...
- 数学--数论--Hdu 5793 A Boring Question (打表+逆元)
There are an equation. ∑0≤k1,k2,⋯km≤n∏1⩽j<m(kj+1kj)%1000000007=? We define that (kj+1kj)=kj+1!kj! ...
- HDU 4920(杭电多校训练#5 1010 题) Matrix multiplication(不知道该挂个什么帽子。。。)
题目地址:pid=4920">HDU 4920 对这个题简直无语到极点. . .竟然O(n^3)的复杂度能过....方法有三.. 1:进行输入优化和输出优化. . (前提是你的输入优化 ...
- 多校6 1001 HDU5793 A Boring Question (推公式 等比数列求和)
题解:http://bestcoder.hdu.edu.cn/blog/ 多校6 HDU5793 A Boring Question // #pragma comment(linker, " ...
随机推荐
- HttpClientFactory 使用说明 及 对 HttpClient 的回顾和对比
目录 HttpClient 日常使用及坑点: HttpClientFactory 优势: HttpClientFactory 使用方法: 实战用法1:常规用法 1. 在 Startup.cs 中进行注 ...
- PythonDay03
## 第三章 ### 今日内容 1.整型 2.布尔值 3.字符串 索引 切片 步长 字符串的方法 4.for循环 ### 1.整型 - python3:全部是整形- python2:整形,长 ...
- redis缓存介绍以及常见问题浅析
# 没缓存的日子: 对于web来说,是用户量和访问量支持项目技术的更迭和前进.随着服务用户提升.可能会出现一下的一些状况: 页面并发量和访问量并不多,mysql足以支撑自己逻辑业务的发展.那么其实可以 ...
- Django:在OS X环境下连接MySQL数据库
正常的安装只需要执行以下2条命令: $ brew install mysql-connector-c $ pip3 install mysqlclient 但在执行 pip3 install mysq ...
- java并发编程(十九)----(JUC集合)总体框架介绍
本节我们将继续学习JUC包中的集合类,我们知道jdk中本身自带了一套非线程安全的集合类,我们先温习一下java集合包里面的集合类,然后系统的看一下JUC包里面的集合类到底有什么不同. java集合类 ...
- manifest.json 解析--手机web app开发笔记(三-2)
四.SDK配置和模块权限配置 SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包”,也就是辅助开发某一类软件的相关文档.范例和工具的集合都可以叫做“S ...
- 鲜为人知的maven标签解说
目录 localRepository interactiveMode offline pluginGroups proxies servers mirrors profiles 使用场景 出现位置 激 ...
- windiows下搭建python+selenium+unittest+Chrome的Web自动化环境
一.selenium.unittest概念 Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测试,并且 ...
- 容易上手搭建vue2.0开发环境
第一步:安装node 前端开发框架和环境都是需要 Node.js ,先安装node.js开发环境,vue的运行是要依赖于node的npm的管理工具来实现,下载https://nodejs.org/en ...
- 洛谷 P3195 [HNOI2008]玩具装箱TOY
题意简述 有n个物体,第i个长度为ci 将n个物体分为若干组,每组必须连续 如果把i到j的物品分到一组,则该组长度为 \( j - i + \sum\limits_{k = i}^{j}ck \) 求 ...