求1∽100内的素数,这样写为什么只能输出2和3


#include<stdio.h>
int main()
{
    int i,j;int f=1;
    for(i = 2;i <= 100;i++)    
    {
        for(j = 2;j <= i-1;j++)    
        {
            if(i%j == 0)
            {f=0;
                break;
            }
        }
        if(f==1)
        {
            printf("%d是素数\n",i);
        }
    }
    return 0;
}

为什么只能输出2和3,应该怎么改,像保留标量

for循环内要加上f=1; 否则一旦执行了f=0后,f值就永远是0了

 
#include<stdio.h>
int main()
{
    int i,j;int f=1;
    for(i = 2;i <= 100;i++)    
    {
        f=1;
        for(j = 2;j <= i-1;j++)    
        {
            if(i%j == 0)
            {f=0;
                break;
            }
        }
        if(f==1)
        {
            printf("%d是素数\n",i);
        }
    }
    return 0;
}

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7562574
  • 这篇博客也不错, 你可以看下从键盘任意输入2个数,求这两个数的绝对值之和并输出结果
  • 除此之外, 这篇博客: 浅谈汉诺塔问题,以及对其递归的分析中的 下面给出图示,以便理解 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • **在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  • 您还可以看一下 李月喜老师的企业微信开发第三方应用开发篇课程中的 解决方案录入,应用搜索可见,应用上架概述小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    问题:求解1~100内的所有素数,为什么代码只输出了2和3?

    思路:判断素数的方法是遍历除以2到sqrt(n)之间的所有正整数,如果都不能整除则为素数。可以使用for循环,遍历1~100内的所有数,判断是否为素数,是则添加到列表中。

    代码实现:

    #include <stdio.h>
    #include <math.h>
    
    int is_prime(int n) {  // 判断是否为素数函数
        int i;
        if (n <= 1) {
            return 0;
        }
        for (i = 2; i <= sqrt(n); i++) {
            if (n % i == 0) {
                return 0;
            }
        }
        return 1;
    }
    
    int main() {
        int i;
        int primes[100];
        int count = 0;
        for (i = 1; i <= 100; i++) {  // 遍历1~100内的所有数
            if (is_prime(i)) {  // 判断是否为素数
                primes[count++] = i;  // 添加到列表中
            }
        }
        for (i = 0; i < count; i++) {  // 输出素数列表
            printf("%d ", primes[i]);
        }
        return 0;
    }
    

    这段代码使用了is_prime函数来判断素数,并使用数组primes来保存素数列表,最后循环输出即可。