筛选法求一百以内素数,函数形式

编写程序,用筛选法求出100以内的素数并打印输出。要求:程序中判断某数是否为素数写成函数形式。

你题目的解答代码如下:

#include <stdio.h>
int isprime( int n);
int main()
{
    int i;
    for( i=1; i<=100; i++ ) {
        if(isprime(i)){
            printf("%d ", i);
        }
    }
    return 0;
}
int isprime(int n)
{
    int i;
    if(n<=3) return n>1;
    for(i=2;i*i<=n;i++)
        if(n%i==0) return 0;
    return 1;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

 
#include <stdio.h>
#include <math.h>
 
int main()
{        
    int flag = 1;
    for(int i =2;i <= 100;i++){ //循环遍历到100 
        for(int j = 2; j < i ;j++){//比较到根号它本身 
            if(i % j==0){
                flag = 0;
                break;
            }
        } 
        if(flag){
            printf("%d\t",i);
        }else{
            flag = 1;
        }
    } 
    return 0;
}
 
#include<stdio.h>

bool isprime(int n)
{
    if(n<4) return n>1;
    if(n%2==0||n%3==0) return n<1;
    for(int i=4;i*i<=n;i++)
        if(n%i==0) return n<1;
    return n>1;
}

int main()
{
    for(int i=1;i<=100;i++){
        if (isprime(i))
            printf("%d ",i);
    }
    return 0;
}

C99标准的编译器,可支持变长数组。已经改成数组形式了,没有用一个*(指针)

img

img

#include<stdio.h>
#include<stdlib.h>

//本函数可以求任何范围内的素数,当然肯定也能求1到100之间的素数了
//筛选法求素数
int isprime(int min ,int max,int out[])
{
    if(min<1 || max<1 || min<1 || max<1)return -1;
    int max1= (max>min) ? max : min;
    //防止参数大小顺序输入倒置
    int min1= (min<max) ? min : max;
    int len=max1-min1+1;
    //原序列个数
    int n=0;
    //素数个数
    int i=0,j=0;
    int prime[max1];
    //把1到max1序列存入内存区
    printf("\n");
    for(i=0;i<max1;i++)
    {
        prime[i]=i+1;
        if(prime[i]>=min1)
        printf("%d ",prime[i]);
        // if((i+1)%10==0)printf("\n");
    }
    puts("\n");
    //1不是素数赋值0
    prime[0]=0;
    //遍历每一个数,后面所有数若能整除当前数则把被除数所在的内存赋值0
    for(i=0;i<max1-1;i++)
    {
        for(j=i+1;j<max1;j++)
        {
            if( prime[j]!=0 && prime[i]!=0 )
            {
                if( prime[j]%prime[i]==0)
                {
                    //把不是素数的数均赋值为0
                    prime[j]=0;
                }
            }
        }
    }
    //printf("\n筛选法求出min1到max1范围内的素数:\n");
    for (i =min1-1 ;i < max1;i++)
    {
        //数组中不为0的数即为素数
        printf("%d ",prime[i]);
        n++;
    }
    puts("\n");
    for (i=min1-1,j=0;i<max1;i++)
    {
        //数组中不为0的数即为素数
        if(prime[i] != 0)
        {
            out[j++]=prime[i];
        }
    }
    out[j]=0;
    //0作为结束标记
    return 0;
}

int main(){
    int min,max;
    int i=0;
    printf("输入范围\n");
    printf("最小值:");
    scanf("%d",&min);
    printf("最大值:");
    scanf(" %d",&max);
    int out[max-min+2];
    isprime(min ,max,out);
    printf("\n%d到%d范围内所有素数为:\n",min,max);
    while(out[i]!=0)
    {
        printf("%d ",out[i++]);
        if(i%10==0)printf("\n");
    }
    return 0;
}