题目描述
现在给你m和n(10≤m≤n≤32000),求出m~n间所有素数,且按每行8个数形式输出
输入格式
输入共一行,两个整数m,n
输出格式
输出格式如题目描述。
输入输出样例
输入 #1 复制
184 759
输出 #1 复制
191 193 197 199 211 223 227 229
233 239 241 251 257 263 269 271
277 281 283 293 307 311 313 317
331 337 347 349 353 359 367 373
379 383 389 397 401 409 419 421
431 433 439 443 449 457 461 463
467 479 487 491 499 503 509 521
523 541 547 557 563 569 571 577
587 593 599 601 607 613 617 619
631 641 643 647 653 659 661 673
677 683 691 701 709 719 727 733
739 743 751 757
说明/提示
10≤m≤n≤32000
#include<iostream>
#include<math.h>
using namespace std;
bool isPrime(int n){
int m = sqrt(n);
for(int i=2;i<=m;i++){
if(n % i == 0)
return false;
}
return true;
}
int main(){
int n,m,count = 0;
cin>>n>>m;
for(int i=n;i<=m;i++){
if(isPrime(i)){
cout<<i<<" ";
count++;
if(count % 8 == 0)
cout<<"\n";
}
}
return 0;
}
埃拉托斯特尼筛法
#include<iostream>
using namespace std;
int main()
{ int a[1000];
int n;
cin>>n;
for(int i=0;i<n;i++){
a[i] = i;
}
a[1] = 0;
for(int i=2;i<n || a[i] != 0;i++){
for(int j = 2*i;j<n;j+=i){
a[j] = 0;
}
}
int count = 0;
for(int i=0;i<n;i++){
if(a[i]){
cout<<a[i]<<" ";
count++;
if(count % 10 == 0){
cout<<"\n";
}
}
}
return 0;
}