热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【题解】无聊的立华奏

题目描述立华奏在学习初中数学的时候遇到了这样一道大水题:“设箱子内有n个球,其中给m个球打上标记,设一次摸球摸到每一个球的概率均等&#

题目描述

立华奏在学习初中数学的时候遇到了这样一道大水题:

“设箱子内有 n 个球,其中给 m 个球打上标记,设一次摸球摸到每一个球的概率均等,求一次摸球摸到打标记的球的概率。”

“emmm…语言入门题。”

但是她改了一下询问方式:设最终的答案为 p,请输出 p 小数点后 K1 到 K2 位的所有数字(若不足则用 0 补齐)。


输入格式

第一行一个整数 T,表示有 T 组数据。

接下来每行包含四个整数 m,n,K1,K2,意义如「题目描述」所示。


输出格式

输出 T 行,每行输出 K2 - K1 + 1 个数,表示答案。

注意同行的数字中间不需要用空格隔开。


输入样例

5
2 3 2 3
1 7 1 7
2 5 1 3
12345 54321 3 10
12345 54321 100000 100010


输出样例

66
1428571
400
72601756
78428232175


说明

对于 100% 的数据,1≤m≤n≤1091 ≤ m ≤ n ≤ 10^91mn109,1≤K1≤K2≤1091 ≤ K1 ≤ K2 ≤ 10^91K1K2109,0≤K2−K1≤1050 ≤ K2 - K1 ≤ 10^50K2K1105,T≤20T ≤ 20T20



对于求概率,直接用 m/nm/nm/n 即可。

m/nm/nm/n 结果为有限小数,设小数位数为 xxx,m/n∗10xm/n*10^xm/n10x 即为 m/nm/nm/n 去掉小数点后的数字,(m∗10x/n)mod10(m*10^x/n) mod 10(m10x/n)mod10 为去掉小数点后的数字的最后一位,即原数的小数点后第 xxx 位。

进一步得出,求小数点后第 iii 位数字,即为 int(m∗10i/n)mod10int(m*10^i/n)mod 10int(m10i/n)mod10

其中 10i10^i10i 可直接用快速幂求出。



但是对于 int(m∗10i/n)mod10int(m*10^i/n)mod 10int(m10i/n)mod10 而言,其中 m∗10im*10^im10i 容纳不了太多的位数,怎么办呢?

这时可以想到:
(a/n)mod10(a/n)mod 10(a/n)mod10
a>10na>10na>10n,则:

原式
=((a−10n+10n)/n)mod10=((a-10n+10n)/n)mod10=((a10n+10n)/n)mod10
=((a−10n)/n+10n/n)mod10=((a-10n)/n+10n/n)mod10=((a10n)/n+10n/n)mod10
=((a−10n)/n+10)mod10=((a-10n)/n+10)mod10=((a10n)/n+10)mod10
=((a−10n)/n)mod10=((a-10n)/n)mod10=((a10n)/n)mod10
进一步,可以想到 aaaamod10amod10amod10 的结果是相同。

把此式代入 (m∗10i/n)mod10(m*10^i/n)mod 10(m10i/n)mod10,有:
(m∗10i/n)mod10(m*10^i/n)mod 10(m10i/n)mod10
=int(10i∗((m−10n+10n)/n))mod10=int(10^i*((m-10n+10n)/n))mod 10=int(10i((m10n+10n)/n))mod10
=int(10i∗((m−10n)/n+10n/n))mod10=int(10^i*((m-10n)/n+10n/n))mod 10=int(10i((m10n)/n+10n/n))mod10
=int(10i∗((m−10n)/n+10))mod10=int(10^i*((m-10n)/n+10))mod 10=int(10i((m10n)/n+10))mod10
=int(10i∗(m−10n)/n+10i∗10)mod10=int(10^i*(m-10n)/n+10^i*10)mod 10=int(10i(m10n)/n+10i10)mod10
=int(10i∗(m−10n)/n)mod10=int(10^i*(m-10n)/n)mod 10=int(10i(m10n)/n)mod10
=int(10i∗(mmod10n)/n)mod10=int(10^i*(mmod10n)/n)mod 10=int(10i(mmod10n)/n)mod10
=int(((10i∗(mmod10n))mod10n)/n)mod10=int(((10^i*(mmod10n))mod10n)/n)mod 10=int(((10i(mmod10n))mod10n)/n)mod10

便变成了快速幂求 mod10nmod10nmod10n 的余数了。

#include
#include
using namespace std;
long long t,n,m,k1,k2;
/*
m*10
if m>=n then m-n若循环节长度为 x
(m*10^x)/n为循环节数字的整数形式
求第小数点后 i 为即为 ((m*10^i)/n)%10对于 (a/b)%10
如果 a 大于 10b,则有 (a/b)%10
=((a-10b+10b)/b)%10
=((a-10b)/b+10b/b)%10
=((a-10b)/b+10)%10
=((a-10b)/b)%10
因此对于 a 和 (a-10b) 而言,结果相同 所以:
((m*10^i)/n)%10
=(((m*10^i)%10n)/n)%10
*/

long long pow(long long i)
{long long ans=m%(10*n),a=10;while(i){if(i&1)ans=(ans*a)%(10*n);a=(a*a)%(10*n);i>>=1;}return ans;
}
int main()
{cin>>t;while(t--){cin>>m>>n>>k1>>k2;for(long long i&#61;k1;i<&#61;k2;i&#43;&#43;)cout<<(pow(i)/n)%10;cout<<&#39;\n&#39;;}return 0;
}

推荐阅读
  • 本文深入探讨了POJ2762问题,旨在通过强连通分量缩点和单向连通性的判断方法,解决有向图中任意两点之间的可达性问题。文章详细介绍了算法原理、实现步骤,并附带完整的代码示例。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 本文探讨了在C++中如何有效地清空输入缓冲区,确保程序只处理最近的输入并丢弃多余的输入。我们将介绍一种不阻塞的方法,并提供一个具体的实现方案。 ... [详细]
  • 哈密顿回路问题旨在寻找一个简单回路,该回路包含图中的每个顶点。本文将介绍如何判断给定的路径是否构成哈密顿回路。 ... [详细]
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
  • 本文介绍如何在 C++ 中使用链表结构存储和管理数据。通过具体示例,展示了静态链表的基本操作,包括节点的创建、链接及遍历。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 问题描述:通过添加最少数量的括号,使得给定的括号序列变为合法,并输出最终的合法序列。数据范围:字符串长度不超过100。涉及算法:区间动态规划(Interval DP)。 ... [详细]
  • 数据结构入门:栈的基本概念与操作
    本文详细介绍了栈这一重要的数据结构,包括其基本概念、顺序存储结构、栈的基本操作(如入栈、出栈、清空栈和销毁栈),以及如何利用栈实现二进制到十进制的转换。通过具体代码示例,帮助读者更好地理解和应用栈的相关知识。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文介绍了Linux系统中的文件IO操作,包括文件描述符、基本文件操作函数以及目录操作。详细解释了各个函数的参数和返回值,并提供了代码示例。 ... [详细]
  • 编程挑战:2019 Nitacm 校赛 D 题 - 雷顿女士与分队(高级版)
    本文深入解析了2019年Nitacm校赛D题——雷顿女士与分队(高级版),详细介绍了问题背景、解题思路及优化方案。 ... [详细]
  • C语言基础入门:7个经典小程序助你快速掌握编程技巧
    本文精选了7个经典的C语言小程序,旨在帮助初学者快速掌握编程基础。通过这些程序的实践,你将更深入地理解C语言的核心概念和语法结构。 ... [详细]
  • 本文探讨了在使用Selenium进行自动化测试时,由于webdriver对象实例化位置不同而导致浏览器闪退的问题,并提供了详细的代码示例和解决方案。 ... [详细]
  • 本文探讨了如何在iOS开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
author-avatar
nora抹抹茶I
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有