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

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

2,基本思想:
(1)首先2肯定是一个质数,先打印出来
(2)使用循环,从3开始到不大于n。优化要点:不要都遍历到,把偶数的给排除,4,6。。。这些都不是质数
(2.1)判断当前这个数是不是质数:
使用循环,做模运算,如果==0 就不是质数 退出。优化要点:只检测到根号下就可以了。
(2.2)当前数是质数,打印出来。

3,代码实现

#include <iostream>
using namespace std;
int main() {
 int n=0; //输入的n
 cin >> n;
 cout << 2 << endl; // 先输出2
 for (int i = 3; i < n; i += 2) {//使用循环检测(<=n)的所有数。优化要点:排除大于2 的偶数,减少不必要的运算
  int j;
  for (j = 3; j < sqrt(i); j++) {// 使用循环。优化要点:只检测到根号下就可以了。
   if (i%j ==0)
    break;// 不是素数
  }
  if (j * j > i)//是素数
   cout << i << endl;
 }
 return 0;
}

效果
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值