求素数的个数,我只对了一半

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img

img

把你的代码改了改


#include<iostream>
using namespace std;
int main()
{
    int a, b, c = 0, i = 2;
    cin >> a >> b;
    a = a == 1 ? 2 : a;//如果a=1不计算1(1不是素数)
    for (;a<b;a++)
    {
        i = 2;
        int p = 1;
        while (i < a&&p == 1)
        {
            if (a%i == 0)
            {
                p = 0;
            }
            i++;
        }
        if (p == 1)
            c++;
    }
    cout << c;
}

素数不是这么求的,看一下我下面这个求素数的函数

#include<stdio.h>
#include<math.h>

//是素数返回1,不是则返回0 
int is_prime(int n){
    int i;
    for(i = 2;i <= sqrt(n);i++){
        if(n % i == 0)
            return 0;
            
    }
    return 1;
}

int main(){
    //求出100-200之内的所有素数 
    
    int i;
    for(i = 100;i < 200;i++){
        if(is_prime(i) == 1)
            printf("%d\n",i);
    }
    return 0;
}

1.素数一般指质数。 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
2.问题在if(a%i!=0) c++;在判断a是否为素数,a除不尽i就对c自增了。实际应该是a除不尽2到a的所有数,都除不尽时再自增。
3.第二个问题i在第二次及以后没有恢复初值2。