2137 - [数值问题]素数筛选

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB


素数筛选(prime/c/cpp) 

【问题描述】 

输入一正整数n(2<=n<=10^5),按顺序输出2到n范围内的所有素数。

【输入格式】prime.in

输入共一行一个数,表示n的值。

【输出格式】primeout

输出若干行,每行5个素数,用空格隔开。

【输入样例1】&nbsp;<br />

20

【输出样例1】

2 3 5 7 11

13 17 19

<br />

<br />

<br />

题目输入

题目输出

输入/输出样例

输入格式


                        

输出格式


                        

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;
}

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;
}

Python解答

# coding=utf-8
import sys

def main():
    a = list()
    k = 0
    n = int(sys.stdin.readline().strip())
    for i in range(2, n+1):
        j =2
        for j in range(2, int(i ** 0.5)+1):#**代表乘方
            if (i % j == 0):
                break
        else:
            a.append(i)
    for index,num in enumerate(a):
        if(index+1)%5 == 0:
            print(num)
        else:
            print(num,end='\t')

if __name__ == '__main__':
    main()