旧代码:
#include<iostream>
using namespace std;
bool isPrime(int n){
for(int i=2;i*i<=n;i++) //了解素数定义及规则才能写正确代码
{
if(n%i==0) return false;}
return true;
}
int main(){
int M,N,count=1;//count为素数个数
cin>>M>>N;
int num[10001];
int n=2;
while(count<=N){
if(isPrime(n)) {
num[count]=n;
count++;
}
n++;
}
int rnum=0;
for(int i=M;i<=N;i++){
cout<<num[i];
rnum++;
if(rnum%10==0||i==N) cout<<endl;
else cout<<" ";
}
return 0;
}
新思考后代码(学了STL)
#include<iostream>
#include<vector>
using namespace std;
bool isprime(int n){
for(int i=2;i*i<=n;i++) //少了等于号
if(n%i==0) return false;
return true;
}
int main(){
vector<int> v;
int M,N,count=1,num=2;
cin>>M>>N;
while(count<=N){
if(isprime(num)){
if(count>=M) v.push_back(num);
count++;
}
num++;
}
// for(int i=0;i<v.size();i++){ //为什么格式不对
// cout<<v[i];
// if((i+1)%10) cout<<" ";
// else cout<<endl;
// }
int cnt = 0;
for (int i = 0; i < v.size(); i++) {
cnt++;
if (cnt % 10 != 1) printf(" ");
printf("%d", v[i]);
if (cnt % 10 == 0) printf("\n");
}
return 0;
}
总结:
之前有个错误是在isprime()函数里,
for(int i=2;i*i<=n;i++) //要加等于号,i从2开始
加注释符的格式代码地方不知道为什么不行,后面再看下
参考的博客:地址