str 学数学 题解

str,数学,题解 · 浏览次数 : 15

小编点评

**代码** ```python def check(n): # 使用循环计算积和 sum = 0 for i in range(1, n + 1): for j in range(1, n + 1): if i != j: sum += (i * (n + 1)) // j return sum == (n * (n + 1)) // 2 # 遍历数据范围 for _ in range(41, 43): L, R = int(input()), int(input()) # 评估答案 result = check(R - L + 1) print(result) ``` **说明** 1. `check()` 函数使用循环计算积和,并检查积和是否等于 (n * (n + 1)) // 2。 2. 遍历数据范围,对于每组测试用例,使用 `check()` 函数判断是否满足条件。 3. 输出结果,即每个测试用例的答案。

正文

Example 1 (str 学数学) str 同学因为名字里含有一个 str,所以觉得字符串对于他来说太简单了,于是他开始了他的数学之旅。

在旅途中str遇到了刚抽到胡桃的 lyl,而 lyl 同学正沉浸在出货的喜悦之中,为了能收获双倍喜悦,他便询问 str,他选的区间内有多少个幸运数字,str觉得这个问题和字符串一样简单,于是把这个问题交给了你。

共有 T 组询问,每次给出两个正整数 L,R,你需要判断有多少 nLnR 使得方程 i=1nj=1nijn+1=n2(n1)4 成立。

请输出你得到的答案。

数据范围:1T100001LR107

样例输入:

4
1 4
2 8
1 10
1 100

样例输出:

3
3
5
26

来源:2023 年寒假集训 B 组总结赛

考场上当然是打表找规律了,但非常愚钝地没看出来……

结论是,n 是一个幸运数字,当且仅当 n+1 是一个质数。下面提供两种证明方法。

Official Solution

出题人提供的非常有技巧性的解法。

i=1nj=1nijn+1=n2(n1)4

考虑为 ijn+1 配对,

i=1nj=1nijn+1+i(nj+1)n+1=n2(n1)2i=1nj=1nijn+1+iijn+1=n2(n1)2i=1nj=1ni[n+1ij]=n2(n1)2n2(n+1)2i=1nj=1n[n+1ij]=n2(n1)2i=1nj=1n[n+1ij]=n2

即要求 n+1ij 对任意 1i,jn 成立。因此根据质数定义,n+1 就是且只能是质数了。

Alternative Solution

考场上推了一半的想法。

i=1nj=1nijn+1=n2(n1)4

注意到 amodb=abab,考虑构造取模

i=1nj=1n(n+1)ijn+1=n2(n1)(n+1)4i=1nj=1nijijmod(n+1)=n2(n1)(n+1)4(n(n+1)2)2i=1nj=1nijmod(n+1)=n2(n1)(n+1)4i=1nj=1nijmod(n+1)=n2(n+1)2

考虑固定 i,研究 j 变化下左式的情况。方便起见,我们将上式左侧 j 的取值范围扩展至 0ni=1nj=0nijmod(n+1)=n2(n+1)2 细心的读者或许已经发现,当 gcd(i,n+1)=1 恒成立,即 n+1 为质数时,ijmod(n+1) 将取遍 0n,此时左右两式相等。下面我们证明这是上式相等的充分必要条件。

仍从 ijmod(n+1) 的取值下手,我们研究如下以 jt 为变量的不定方程的解 ij+(n+1)t=m(0m<n+1) 由裴蜀定理(Bézout’s identity),方程有解的充分必要条件为 gcd(i,n+1)m。不妨记 d=gcd(i,n+1)m=kd,方程变为 ij+(n+1)t=kd(0k<n+1d) 写出该不定方程的通解 {j=j0+sn+1dt=t0sid(sZ) 不难发现,对 0k<nd,上述不定方程在 0jn 的范围内总有 d 个解,这意味着 ijmod(n+1) 将有 d 次取到 kd。故我们有 i=1nj=1nijmod(n+1)=i=1ndk=0n+1d1kd=i=1nd2k=0n+1d1k=12i=1nd2(n+1d1)n+1d=n+12i=1n(n+1d)=n2(n+1)2 化简即得 i=1n(n+1d)=n2i=1nd=ni=1ngcd(i,n+1)=n 显然上式等价于对任意 1ingcd(i,n+1)=1 恒成立。因此我们证明了 n+1 是质数是原方程成立的充分必要条件。

与str 学数学 题解相似的内容:

str 学数学 题解

挺有意思的一道数学题。

[转帖]Bash 取字符串的最后 N 个字符 - ${str:0-N:LENGTH}

2021-10-11 10:49 jetwill 阅读(39) 评论(0) 编辑 收藏 举报 Bash 取字符串的最后 N 个字符: ${str:0-N:LENGTH} or ${str:0-N} https://tldp.org/LDP/abs/html/string-manipulation.h

#Python 文本包含函数,pandas库 Series.str.contains 函数

一:基础的函数组成 ’’‘Series.str.contains(pat,case = True,flags = 0,na = nan,regex = True)’’'测试pattern或regex是否包含在Series或Index的字符串中。 返回布尔值系列或索引,具体取决于给定模式或正则表达式是

C 语言中的 sscanf 详解

一、函数介绍 函数原型:int sscanf(const char *str, const char *format, ...); 返 回 值:成功返回匹配成功的模式个数,失败返回 -1。 RETURN VALUE These functions return the number of input

[转帖]【shell语法 | 01】基础练习

https://www.cnblogs.com/sunbines/p/14587095.html 目录 利用判断符号[ ] 循环体 正文 回到顶部 利用判断符号[ ] [ str ] : str 字符串存在为真 1 [root@localhost ~]# if [ ]; then echo 'tru

@Async异步失效的9种场景

前言 最近星球中有位小伙伴问了我一个问题:他在项目某个方法使用@Async注解,但是还是该方法还是同步执行了,异步不起作用,到底是什么原因呢? 伪代码如下: @Slf4j @Service public class UserService { @Async public void async(Str

【Android逆向】破解看雪test3.apk方案一

1. test3.apk 安装到手机 2. 发现其实际逻辑和之前的test2.apk基本一致,逆向so查看到加入了一些检查逻辑 代码: jstring __fastcall fuck(JNIEnv *env, jclass jcls, jstring str_) { ...... if ( !str

【Android逆向】破解看雪9月算法破解第一题

1. 安装apk到手机 2. 随意输入账号和密码,点击register,报错crackme1:ERROR 3. 将apk拖入到jadx中进行观察 public native String register(String str); static { System.loadLibrary("nativ

【Android逆向】破解看雪9月算法破解第二题

1. apk安装到手机,一样的界面,随便输入一样的报错 2. apk拖入到jadx重看看 public native String sha1(String str); static { System.loadLibrary("native-lib"); } /* JADX INFO: Access

【Android逆向】破解看雪9月算法破解第三题

这题的目标是算法还原,并写出注册机 1. 9月份算法第一题.apk 安装到手机 2. 随意输入账号密码,提示错误 3. apk拖入到jadx中 public native boolean register(String str, String str2); static { System.loadL