2137 - [数值问题]素数筛选
素数筛选(prime/c/cpp)
【问题描述】
输入一正整数n(2<=n<=10^5),按顺序输出2到n范围内的所有素数。
【输入格式】prime.in
输入共一行一个数,表示n的值。
【输出格式】primeout
输出若干行,每行5个素数,用空格隔开。
【输入样例1】 <br />
20
【输出样例1】
2 3 5 7 11
13 17 19
<br />
<br />
<br />
Input
Output
Examples
Input
Output
Solution C
#include<stdio.h> #include<math.h> int main() { int n,i,j,a; double k; while(~scanf("%d",&n)) { a=0; for(i=2;i<=n;i++) { k=sqrt(i); for(j=2;j<=k;j++) { if(i%j==0) { break; } } if(j>k) { printf("%d",i); a++; if(a%5==0) printf("\n"); else printf(" "); } } printf("\n"); } return 0; }
Solution C++
// // main.cpp // 上机练习 // // Created by 朱世起 朱 on 2017/2/20. // Copyright © 2017年 朱世起 朱. All rights reserved. // #include <iostream> #include <stdio.h> #include <string> using namespace std; int main(){ long n,temp; cin>>n; bool *a=new bool[n+1]; for (long i=2; i<=n; ++i) { a[i]=true; } for (long i=2; i<=n+1; ++i) { for (long k=2; k<=i; ++k) { temp=i*k; if(temp<=n)a[temp]=false; else break; } } //输出 long set=1; for (long j=2 ;j<=n; ++j) { if (set==6){cout<<endl;set=1;} if (set==1 && a[j]==true){cout<<j;++set;} else if(a[j]==true){cout<<" "<<j;++set;} } return 0; }