@jesseliu612
2017-03-10T22:23:35.000000Z
字数 9587
阅读 1333
组合数学
栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量。在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起。
栋栋的植物种得非常整齐,一共有n列,每列有m棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标来表示,其中x的范围是1至n,表示是在第x列,y的范围是1至m,表示是在第x列的第y棵。
由于能量汇集机器较大,不便移动,栋栋将它放在了一个角上,坐标正好是(0, 0)。 能量汇集机器在汇集的过程中有一定的能量损失。如果一棵植物与能量汇集机器连接而成的线段上有k棵植物,则能量的损失为。例如,当能量汇集机器收集坐标为(2, 4)的植物时,由于连接线段上存在一棵植物(1,2),会产生3的能量损失。注意,如果一棵植物与能量汇集机器连接的线段上没有植物,则能量损失为1。现在要计算总的能量损失。 下面给出了一个能量采集的例子,其中n = 5,m = 4,一共有20棵植物,在每棵植物上标明了能量汇集机器收集它的能量时产生的能量损失。 在这个例子中,总共产生了36的能量损失。
仅包含一行,为两个整数n和m。
仅包含一个整数,表示总共产生的能量损失。
输入1:
5 4
输出1:
36
输入2:
3 4
输出2:
20
对于100%的数据:1 ≤ n, m ≤ 100000。
为了叙述方便,定义为表达式的值。
首先来看题目要求解的是什么。通过观察可以发现,
思维的王者向wfj2048聊起了最小公倍数(Least Common Multiple)。对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数。例如,LCM(6, 8) = 24。回到家后,wfj2048为了研究最小公倍数,画了一张的表格。每个格子里写了一个数字,其中第i行第j列的那个格子里写着数为LCM(i, j)。一个的表格如下:
看着这个表格,wfj2048想到了很多可以思考的问题。不过他最想解决的问题却是一个十分简单的问题:这个表格中所有数的和是多少。当N和M很大时,wfj2048就束手无策了,因此他找到了聪明的你用程序帮他解决这个问题.
第一行为数据组数T(T<=)
从第二行开始,对于每组数据,有两个正整数n,m。n,m<=
对于每组数据,输出一行答案。 请输出答案mod +1的值。
输入:
1
4 5
输出:
122
有一张N×m的数表,其第i行第j列(1<=i<=n,1<=j<=m)(1<=n,m<=10^5,1<=Q<=2×10^4)的数值为能同时整除i和j的所有自然数之和。
给定a,计算数表中不大于a的数之和。
输入包含多组数据。
输入的第一行一个整数Q表示测试点内的数据组数,接下来Q行,每行三个整数n,m,a(|a| < =10^9)描述一组数据。
对每组数据,输出一行一个整数,表示答案模2^31的值。
输入:
2
4 4 3
10 10 5
输出:
20
148
将题目求解的目标明确:
牛牛是一个热爱算法设计的高中生。在他设计的算法中,常常会使用带小数的数进行计算。牛牛认为,如果在 进制下,一个数的小数部分是纯循环的,那么它就是美的。
现在,牛牛想知道:对于已知的十进制数 和 ,在 进制下,有多少个数值上互不相等的纯循环小数,可以用分数 表示,其中 ,且 是整数。
一个数是纯循环的,当且仅当其可以写成以下形式:
其中, 是一个整数,;对于 , 是 进制下的一位数字。
例如,在十进制下,是纯循环的,它可以用 、 等分数表示;在十进制下,则不是纯循环的,它可以用 等分数表示。
需要特别注意的是,我们认为一个整数是纯循环的,因为它的小数部分可以表示成 的循环或是 的循环;而一个小数部分非 的有限小数不是纯循环的。
输入文件只有一行,包含三个十进制数 ,意义如题所述。
只输出一行一个整数,表示满足条件的美的数的个数。
2 6 10
4
满足条件的数分别是:
和 虽然都是纯循环小数,但因为它们相等,因此只计数一次;同样, 和 也只计数一次。
23333 666666 310
5089564081
这部分将提供一个将分数化为对应的小数的方法,如果你已经熟悉这个方法,你不必阅读本提示。
分数可以通过除法,用分子除以分母化为对应的小数。有些分数在除法过程中无法除尽,这样的分数在不断进行的除法过程中余数一定会重复出现。从商数的个位所对应的余数起,设第一次重复出现的余数前两次出现的位置所对应的商数位分别是小数点后第 位和小数点后第 位(特殊地:如果其中一个对应的商数位是个位,则认为 ;不妨设 ),则其循环部分可以用小数点后第 位到小数点后第 位的循环来表示。
例如:在十进制下,将 转化为小数时,个位开始的商数依次为 ,对应的余数分别为 。余数第一次重复出现的位置是个位和小数点后第 位,那么 即其循环部分可以用小数点第 位到第 位来表示。表示为:。
在十进制下,将 转化为小数时,个位开始的商数依次为 ,对应的余数分别为 。余数第一次重复出现的位置是小数点后第 位和小数点后第 位,即其循环部分可以用小数点后第 位来表示。表示为:。
需要注意的是:商数重复出现并不代表进入了循环节。
对于所有的测试点,保证 。对于每个测试点,有以下约束(其中留空的表示没有特殊的约束):
测试点编号 | |||
---|---|---|---|
1 | |||
2 | |||
3 | |||
4 | |||
5 | |||
6 | |||
7 | |||
8 | |||
9 | |||
10 | |||
11 | |||
12 | |||
13 | |||
14 | |||
15 | |||
16 | |||
17 | |||
18 | |||
19 | |||
20 | |||
21 | |||
22 | |||
23 | |||
24、25 |
时间限制:
空间限制:
(题目描述来自uoj)
什么情况下,一个k进制小数会是纯循环小数呢?在10进制下,我们知道3、7、11为分母的小数,只要分子和分母互质,那么就是纯循环小数。可以猜测,当分母和进制互质的时候,只要分子和分母互质,那么就是纯循环小数。编写一个简单的验证程序,发现可以通过大样例。
为什么这样是正确的?
首先假设。
还记得我们小学时候做分数化循环小数练习题的经验吗?很多同学都记得,当这一次出现的被除数在之前出现过,那么就意味着出现循环节了。
发现每次的被除数是什么了吗?事实上第c位小数对应的就是。如果循环节长度为,那么。
事实上, 的时候,这个结论依旧成立。
将上式左右两边同除x,得到,请数论大神FHR证明,我不会证。
由于题目要求不重复,所以还有。
令。
根据上面的分析,可以得到下面的式子:
观察发现效率瓶颈在于求
所以:
还是和之前一样,再定义一个函数来解决这个问题。
令