(C/C++学习) 37. 关于力扣204. 计数质数的相关推导

前言: 本文主要记录关于力扣 (204. 计数质数问题)的两个问题推导:

 

1. 对于任意一个大于 2 的正整数 n, 如果在区间 [2, √n] 之间不存在 n 的正整数乘法因子 a , 那么 n 是质数。

推导:在上述前提下,假设在 (√n, n) 之间存在 n 的正整数乘法 b 使得 b * c = n, 那么 c 一定小于 √n 【n =√n*√n】,而这与前提(不存在位于 [2,√n] 之间的乘法因子)相矛盾,因此假设不成立。

 

2. 对于任意一个大于 2 的正整数 n, 从 2 开始,把所有后面2的倍数置为已标记非质数,把所有后面3的倍数置为已标记非质数.....循环到 √n,后面剩下的都是质数。

推导:在上述前提下,假设在 (√n, n] 之间还存在未标记非质数 m,那么必存在 a ∈ [2, √m] 和 b ∈ [√m, m) 使得 m = a*b, 并且 a ∈ [2, √n], 而这与之前 将 a 的所有倍数置为 已标记非质数矛盾,因此假设不成立。

 

3. 对于任意一个大于 2 的正整数 n, 从 2 开始,把所有后面2的倍数置为已标记非质数,接着把所有后面3的倍数置为已标记非质数......遇到标记跳过,则后面遇到的未标记的数都是质数。

推导:如果 m 是合数,则必存在乘数因子 a ∈ [2,m), b ∈ [2,m) 使得 m=a*b, 那么在前面遇到其乘数因子(a 和 b)时已经将其置为标记的非质数了。

posted @ 2020-06-15 12:50  退後。  阅读(180)  评论(0编辑  收藏  举报