(循环)素数个数问题,C求解

题目描述
输入2个正整数m, n(m<=n),求它们之间的素数个数,m和n也考虑在内。

输入格式
正整数m和n,空格隔开。

输出格式
素数个数

样例输入
2 5
样例输出
3
怎么做到范围内求素数个数?只知道素数的判断方法

#include <stdio.h>

int main()
{
    int n, i;
    scanf("%d", &n);

    if (n == 1) {
        printf("no");
    } else if (n == 2) {
        printf("yes");
    } else {
        for (i = 2; i < n; i++) {
            if (n % i == 0) {
                printf("no");
                return 0;
            }
        }
        if (n > 1) {
            printf("yes");
        }
    }

    return 0;
}

#include <stdio.h>
int foo(int n)
{
    if (n == 1) {
        return 0;
    } else if (n == 2) {
        return 1;
    } else {
        int i;
        for (i = 2; i < n; i++) {
            if (n % i == 0) {
                return 0;
            }
        }
        if (n == i) {
            return 1;
        }
    }
}
int main()
{
    int m, n, i, cnt = 0;
    scanf("%d %d", &m, &n);
     for (i = m; i <= n; i++)
    {
        if (foo(i)) cnt++;
    }
     printf("%d", cnt);
    return 0;
}

供参考:

#include <stdio.h>
int isprime(int  n)
{
    int i;
    if (n < 4)
        return n > 1;
    for (i = 2; i * i <= n; i++)
        if (n % i == 0) return 0;
    return 1;
}
int main()
{
    int m, n, i, cnt = 0;
    scanf("%d%d", &m, &n);
    for (i = m; i <= n; i++)
        if (isprime(i)) cnt++;
    printf("%d", cnt);
    return 0;
}

【以下回答由 GPT 生成】

要在给定范围内求素数个数,可以采用以下步骤来编写C语言程序:

  1. 首先,需要检查输入的两个正整数m和n是否满足条件:m <= n。如果不满足条件,可以输出错误信息并结束程序。

  2. 定义一个函数isPrime,用于判断一个数是否为素数。该函数需要输入一个整数作为参数,返回一个布尔值(true表示是素数,false表示不是素数)。

2.1. 判断数num是否小于等于1,如果是,则num不是素数,返回false。

2.2. 初始化一个变量i为2,循环从2到num-1。

     2.2.1. 如果num能够被i整除(即num%i等于0),则num不是素数,返回false。

     2.2.2. 否则,继续循环。

2.3. 如果循环结束时,都没有找到能够整除num的数,则num是素数,返回true。

  1. 定义一个变量count,用于记录素数的个数,并初始化为0。

  2. 循环从m到n,对每个数进行判断。

4.1. 如果当前数i是素数(即调用isPrime函数返回true),则count加1。

  1. 输出count作为素数个数。

下面是完整的C语言代码示例:

#include <stdio.h>
#include <stdbool.h>

bool isPrime(int num) {
    if (num <= 1)
        return false;

    for (int i = 2; i < num; i++) {
        if (num % i == 0)
            return false;
    }

    return true;
}

int main() {
    int m, n;
    int count = 0;

    // 输入m和n
    scanf("%d %d", &m, &n);

    // 检查m和n是否满足条件
    if (m > n) {
        printf("Invalid input!\n");
        return 0;
    }

    // 循环判断素数个数
    for (int i = m; i <= n; i++) {
        if (isPrime(i))
            count++;
    }

    // 输出素数个数
    printf("%d\n", count);

    return 0;
}

请注意,该代码只是一个示例,可能并不是最优解。在实际的程序中,可以根据具体情况做一些优化,例如:

  • 对isPrime函数进行优化,可以根据素数的性质,只需要判断到num的平方根即可。
  • 使用更高效的算法,如埃拉托斯特尼筛法,可以快速筛选出一定范围内的素数。

希望对你有帮助!如果有任何疑问,请随时提出。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你可以看一看我的这个博客,可能会对你有帮助!http://t.csdn.cn/QDuv1