输入正整数n(n大于等于2),求不大于n的全部质数(素数)【其中一种优化算法:筛选数组法】

1, 质数(素数)概念:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。例如:3 只能被1和3整除,5,7,9 这些都是。4,6这些都不是质数(注意2是质数)。

2 基本思想:利用数组存储所有数值,筛选出全体质数
(1)输入n,创建数组p,数组的内容从0开始依次增1
(2)循环遍历数组p,从下标(记为i)为2的开始
(2.1)如果当前的 p[i] 不是质数,continue 筛选下一个
(2.2)检查数组p中从下标i之后的元素是否为素数。
(2.2.1)如果当前的元素不是质数,continue筛选下一个
(2.2.2)否则,就判断,如果不是质数,就把数组的值标记为-1
(3)从下标2开始,打印出数值不为-1的元素,即为全体质数

3代码

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
	int* p;
	int n;
	cin >> n;
	p = new int[n];
	for (int j = 0; j < n; j++) {
		p[j] = j;
	}
	for (int i = 2; i < n ; i++){ //循环遍历数组,从数字2开始
		if (p[i] =
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是计算不大于N的最大素数的 Python 代码: ```python def is_prime(n): if n <= 1: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True def max_prime(n): for i in range(n, 1, -1): if is_prime(i): return i return None n = int(input("请输入一个正整数N:")) print("不大于N的最大素数是:", max_prime(n)) ``` 如果用户输入的N是负数或0,程序会返回None。 ### 回答2: 首先,我们需要明确素数的定义:素数指的是只能被1和自身整除的正整数,即除了1和自身之外没有其他约数的数。 根据题目要,我们需要找出不大于N的最大素数。为了实现这个目标,我们可以从N开始逆序向下寻找素数,直到找到满足条件的素数为止。 具体算如下: 1. 接收用户输入正整数N。 2. 从N开始逆序向下遍历,判断每一个数是否为素数。 3. 对于每一个遍历到的数m,判断是否为素数的方是:从2到sqrt(m)逐个判断是否整除m,如果整除则m不是素数,跳到第5步;如果在这之前没有找到能整除m的数,则m为素数,跳到第4步。 4. 输出m,即为不大于N的最大素数。 5. 结束算。 需要注意的是,在判断是否为素数的过程中我们可以使用开方运算来减少计算量,因为一个数m的约数一定是成对出现的,而且较小的约数一定不能超过m的开方。 以下是一个示例的Python代码实现: ```python import math def is_prime(num): if num < 2: return False for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: return False return True N = int(input("请输入一个正整数N:")) for i in range(N, 1, -1): if is_prime(i): print("不大于N的最大素数为:", i) break ``` 通过这段代码,我们可以根据用户输入找出不大于N的最大素数,并输出结果。 ### 回答3: 算思路如下: 1. 用户输入一个正整数N。 2. 从N开始递减,判断每一个数是否为素数。 3. 如果一个数是素数,输出该数,程序结束。 4. 如果N小于等于2,则输出2,程序结束。 5. 如果N大于2,但是N本身不是素数,则继续递减判断前一个数是否为素数,直到找到一个素数为止。 下面是300字中文回答: 用户输入一个正整数N,我们要计算并输出不大于N的最大素数。 我们可以从N开始递减地判断每一个数是否为素数。如果一个数是素数,那么就输出该数并结束程序。而如果N小于等于2,则输出2并结束程序。 但是如果N大于2,却不是素数,就需要继续递减判断前一个数是否为素数,直到找到一个素数为止。 素数的定义是除了1和它本身,没有其他因数可以整除它。因此我们可以从2开始到sqrt(N)的范围内判断每一个数是否可以整除N,如果找到一个可以整除N的数,则N不是素数。 我们可以用一个for循环和一个if条件判断来实现这个递减的过程。在循环中,我们每次将N减1,并判断是否为素数。如果是素数,就输出该数,并结束循环。 通过这样的算,我们可以得到不大于N的最大素数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值