输出素数

题目描述

编写一个判断素数的函数,主函数中利用这个函数,打印出n与m之间的所有素数。

输入

多组测试数据,每组输入2个整数n和m,其中1 < n <= m <= 1000

输出

在一行输出n和m之间(包含n和m)的所有素数,中间用空格隔开,最后一个数后面没有空格。

样例输入
2 14

样例输出
2 3 5 7 11 13

#include <stdio.h>
#include <math.h>
int isPrime(int n)
{
    int i;
    for(i = 2; i <= (int)sqrt(n); i ++)
        if(n%i == 0) return 0;
    return 1;
}
int main()
{
    int i,m,n;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
    	int a=0;
	for(i = m; i <=n; i ++)
    {
		if(isPrime(i))
        {
            	if(a==0)
			{
			printf("%d", i);
			a++;
			}
			else
			printf(" %d", i);
        }
    }
    printf("\n");
    }
    return 0;
}
以下是几种使用 Python 语言输出素数的实现方法: ### 方法一:简单遍历判断 此方法通过遍历指定范围内的每个数,检查其是否能被 2 到该数减 1 之间的任何数整除。若都不能整除,则该数为素数输出。 ```python # 输出1 - 100的素数素数是仅仅能够被1和自身整除的自然数) k = 101 for i in range(3, k, 1): for j in range(2, i): if i % j == 0: break else: print(i, end=' ') ``` 这种方法的原理是利用了 Python 中`for...else`语句的特性。当`for`循环正常结束(即没有执行`break`语句)时,会执行`else`语句块。这里若`i`不能被 2 到`i - 1`之间的任何数整除,就会执行`else`语句输出素数 [^1]。 ### 方法二:优化遍历范围 该方法通过将内层循环的范围缩小到 2 到该数的平方根,减少不必要的计算。 ```python import math def sushu3(c): m = 2 List = [] while m < c: j = 2 # 只要从2判断到根号m,若m不能被其中的任何一个数整除,则m为素数 while j <= math.sqrt(m): if m % j == 0: break j = j + 1 if (j > math.sqrt(m)): List.append(m) m = m + 1 print(f"{c}以内的素数:{List}") # 调用方法sushu3方法,打印100以内的素数 if __name__ == '__main__': sushu3(100) ``` 这种优化的依据是,若一个数`m`不是素数,则它一定可以分解为两个因数`a`和`b`,其中`a <= sqrt(m)`且`b >= sqrt(m)`。所以只需检查 2 到`sqrt(m)`之间的数是否能整除`m`即可 [^2]。 ### 方法三:埃拉托斯特尼筛法 该方法通过标记非素数来找素数。首先假设所有数都是素数,然后从 2 开始,将每个素数的倍数标记为非素数。 ```python n = 100 is_prime = [True] * (n + 1) is_prime[0] = is_prime[1] = False # 0 和 1 不是质数 for i in range(2, int(n ** 0.5) + 1): if is_prime[i]: for j in range(i * i, n + 1, i): is_prime[j] = False for i in range(2, n + 1): if is_prime[i]: print("质数:", i) ``` 此方法的原理是基于素数的性质:非素数的倍数一定也是非素数。通过标记这些非素数,最终剩下的未被标记的数就是素数 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值