求解 为什么错了……..

img

img

定义一个标识字段,通过标识字段来判断。
int flag=0;//标识字段
当i%j==0时,flag=1
在内循环后,对flag进行判断。

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int i,j,m,n,num=0,flag=0;
    cin>>m>>n;
    for(i=m;i<=n;i++){
        flag=0;
        for(j=2;j<=sqrt(i);j++){
            if(i%j==0){
                flag=1;
                break;
            }
        }
        if(flag==0)
            num++;
    }
    cout<<num<<endl;
    return 0;
}

你的判断有问题,如果m大于2,你一开始就加一了,循环过程又加一
其次判断的时候最好拿一个变量来每次记录,这样不容易出错


#include<bits/stdc++.h>
using namespace std;

int main()
{
    int i,j,m,n,cnt=0,f=0;
    cin>>m>>n;
    for(i=m;i<=n;i++){
        f=0;
        for(j=2;j<=sqrt(i);j++){
            if(i%j==0){
                f=1;break;
            }
        }
        if(f==0)
            cnt++;
    }
    cout<<cnt;
    return 0;
}

img