函数问题之寻找素数

时间: 1ms        内存:128M

描述:

用函数实现操作,查找指定区间[left,right]里的素数个数,将素数保存在prime数组里并在主函数里输出。
//提交时只需提交getprime函数
#include<stdio.h>
#include<string.h>
int prime[10000];
/*
在此写函数

*/
int main()
{
    int getprime(int left,int right);
    int left,right;
    scanf(“%d%d”,&left,&right);
    int i,n=getprime(left,right);
    printf(“%d\n”,n);
    for(i=1;i<n;i++)

        printf(“%d “,prime[i]); 

    if(i == n)

    printf(“%d\n”,prime[i]); 
    return 0;
}

输入:

一行包含两个整数,left和right(0<=left<=right<10000)。

输出:

第一行一个整数表示[left,right]内素数的个数,第二行输出区间内全部的素数,用空格隔开。

示例输入:

2 5

示例输出:

3
2 3 5

提示:

参考答案(内存最优[1160]):

#include<stdio.h>
#include<string.h>
int prime[10000];

int getprime(int left,int right)
{
    if(right<2)
        return 0;
    if(left<=2)
        left=2;
    int i,j,o=0;
    for(i=left;i<=right;i++){
        for(j=2;j*j<=i;j++)
            if(i%j==0)
                break;
        if(j*j>i){
            o++;
            prime[o]=i;
        }
    }
    return o;
}
int main()
{
	int getprime(int left,int right);
	int left,right;
	scanf("%d%d",&left,&right);
	int i,n=getprime(left,right);
	printf("%d\n",n);
	for(i=1;i<n;i++)
		printf("%d ",prime[i]);
        if(i == n)
	printf("%d\n",prime[i]);
	return 0;
}

参考答案(时间最优[1]):

#include<stdio.h>
#include<string.h>
int prime[10000];

int getprime(int left,int right)
{
    int a[right+1],i,j,b=1;
    for(i=2;i<=right;i++)
        a[i]=0;
    for(i=2;i<=right;i++)
        if(a[i]==0)
    {
        if(i<=right&&i>=left)
        {prime[b]=i;
        b++;}
    for(j=i+i;j<=right;j=j+i)
        a[j]=1; }
    return b-1;
}
int main()
{
	int getprime(int left,int right);
	int left,right;
	scanf("%d%d",&left,&right);
	int i,n=getprime(left,right);
	printf("%d\n",n);
	for(i=1;i<n;i++)
		printf("%d ",prime[i]);
        if(i == n)
	printf("%d\n",prime[i]);
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。