用除余法二维数组找素数
时间: 2023-12-09 17:59:34 浏览: 69
除余法是一种用来判断一个数是否为素数的方法,它的基本思想是:对于一个大于1的整数n,如果存在一个小于n的整数k,使得n能够被k整除,那么n就不是素数。否则,n就是素数。
在二维数组中,我们可以将每个数字的行列下标视作一个二元组,例如数字a[i][j]的行列下标为(i,j)。我们可以用除余法来判断每个二元组是否表示一个素数。
具体实现方法如下:
1. 初始化一个二维数组a,其中a[i][j]的初始值为1。
2. 对于每个素数p,遍历数组a,将满足i mod p = 0 或 j mod p = 0 的元素a[i][j]置为0。
3. 遍历数组a,输出所有值为1的元素对应的二元组,即为素数的行列下标。
代码实现如下:
```python
import math
def find_primes(n):
# 初始化二维数组
a = [[1 for j in range(n)] for i in range(n)]
# 将所有能被2整除的元素置为0
for i in range(2, n, 2):
a[i // n][i % n] = 0
# 遍历奇数素数
for p in range(3, int(math.sqrt(n)) + 1, 2):
if a[p // n][p % n] == 1:
# 将满足i mod p = 0 或 j mod p = 0 的元素置为0
for i in range(p * p, n, p):
a[i // n][i % n] = 0
# 输出所有值为1的元素对应的二元组
for i in range(n):
for j in range(n):
if a[i][j] == 1:
print("(", i, ",", j, ")")
```
该代码实现了在n x n的二维数组中找出所有的素数,并输出它们的行列下标。其中,偶数元素直接被置为0,因为除2以外的偶数都不可能是素数。奇数素数从3开始遍历,只需要遍历到sqrt(n)即可,因为如果n不是素数,则n必然可以分解成两个小于等于sqrt(n)的因数的乘积。在遍历时,将满足i mod p = 0 或 j mod p = 0 的元素置为0。最后遍历数组a,输出所有值为1的元素对应的二元组,即为素数的行列下标。
阅读全文