首页 > 试题广场 >

用筛选法求100之内的素数。

[问答题]
用筛选法求100之内的素数。
推荐

#include<stdio.h>

#include<math.h>

int main()

{int i,j,n,a[101]:

for(i=1;i<=100;i++)

a[i]=i;

a[1]=0;

for (i=2;i<sqrt(100);i++)

for (j=i+1;j<=100;j++)

{if(a[i]!=0 && a[j]!=0)

if(a[j]%a[i]==0)

a[j]=0;

}

printf("\n”);

for (i=2,n=0;i<=100;i++)

{if(a[i]!=0)

{printf("%5 d",a[i]);

n++;

}

if(n==10)

{printf("\n");

n=0;

}

}

printf(“\n”)

return 0;

}


发表于 2018-03-25 10:58:05 回复(2)
#include <stdio.h>
#include <math.h>
int main() {
    int i, j, k;
    for (i = 1;i < 100;i++) {  //遍历
        k = sqrt(i); //取平方根
        for (j = 2;j <= k;j++)
            if (i%j == 0) break;
        if (j > k) printf("%d\n", i);
    }
    return 0;
}
发表于 2018-06-21 11:11:38 回复(0)
#include <stdio.h>
#include <stdbool.h>

int main() {
    //如果他是素数,那么他就是1
    bool a[101];
    for(int i = 0;i<101;i++){//先假设0-100的全是素数
        a[i] = 1;
    }
    //因为0和1不是素数
    a[0] = 0;
    a[1] = 0;
    for(int i = 2;i<101;i++){//因为2是素数,从2开始判断
        if(a[i] == 1){
            for(int j = i*2;j<101;j+=i){//将被2整除的数排除
                a[j] = 0;
            }
        }
    }
    printf("100以内的素数有:\n");
    for(int i = 0;i<101;i++){
        if(a[i] == 1){
            printf("%d\n",i);
        }
    }
    return 0;
}

发表于 2022-10-10 11:51:07 回复(0)
#include<stdio.h>
int main(){
	int a[100];
	for(int i=0;i<100;i++)	//给数组赋值1,2,3...100 
		a[i]=i+1;
	
	for(int i=2;i<=100/2;i++)	//2~100/2为测试的因数,下面会将所有除自身外能被整除的数从新赋值为0(筛选挖走) 
		for(int j=1;j<=100;j++){
			if(j%i==0&&a[j-1]!=0&&i!=j)	//若j为素数则a[j-1]赋值为0 
				a[j-1]=0;
		}
		
	printf("1-100内素数有:") ;
	for(int i=1;i<100;i++)	//从a[1]开始,因为a[0]存的为1,1特殊,不为素数 
		if(a[i]!=0)
			printf("%d  ",a[i]);
	return 0; 
} 

发表于 2021-01-20 14:01:17 回复(0)
#include<stdio.h>
int main(){
int arr[100];
for(int i=1;i<=100;i++){
arr[i]=i;
}
arr[1]=0;
for(int j=2;j<=10;j++){
for(x=j+1;x<=100;x++){
if(arr[j]!=0&&arr[x]!=0){
    if(arr[x]%arr[x]==0)
        arr[x]=0;
}}}
    for(int y=1;y<=100;y++){
        if(arr[y]!=0){
            printf("%4d",arr[y]);
            
        }
    }
}

编辑于 2020-12-15 18:08:01 回复(0)
#include"iostream.h"
#include"math.h"
void main()
{
	int i,j,t;
	for(i=1;i<100;i++)
	{
		t=sqrt(i);
		for(j=2;j<=t;j++)
		{
			if(i%j==0)
				break;
			if(j+1>t)
				cout<<i<<" ";
		}
	}
}

发表于 2020-11-19 19:43:11 回复(0)
#include<stdio.h>
int sxss(int n);
int main()
{
    int i;
    for(i=2;i<=100;i++)
    {
        if(sxss(i))
        printf("%d ",i);
    }
    printf("\n");
    return 0;
}
int sxss(int n)
{
    int i;
    int count=0;
    for(i=2;i<=n/2;i++)
    if(n%i==0)
    count++;
    if(count==0)
    return 1;
    else
    return 0;
}
发表于 2020-04-02 20:53:48 回复(0)
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
int main()
{
 int i = 0;
 int j = 0;
 for (i = 1; i <= 100; i++)
 {
  for (j = 2; j < i; j++)
  {
   if (i%j == 0)
   {
    break;
   }
  }
  if (i == j)
  {
   printf("%d ", i);
  }
 }
 system("pause");
 return 0;
}
发表于 2020-02-03 14:56:43 回复(0)
/*用筛选法求给出范围之内的素数。*/
#include <stdio.h>
#include <stdlib.h>
int isPrime(int n){//判断素数
 for(int i = 2; i < n; i ++){
  if(n % i == 0)
   return 0;
 }
 return 1;
}
int* allPrime(int scale){//这个函数要存储下来给定范围内的所有素数
/*而因为这个存储函数不在main函数内,如果用数组存储仅仅是局部变量,
无法实现跨函数输出,因此想到用指针代替,int* 代表输出结果是个指针*/
 int cnt = 0;//记录有多少个素数,便于之后分配指针内存
 for(int i = 2; i <= scale; i ++){//有cnt个素数
  if(isPrime(i))
   cnt ++;
 }
 int* store = malloc(sizeof(int) * cnt);//分配cnt个大小的内存空间
 int serial = 0;//将各个素数按顺序存进指针中,serial代表元素
 for(int i = 2; i <= scale; i ++){//再次走遍范围内所有数
  if(isPrime(i)){//判断是否为素数
   * (store + serial) = i;//存进指针
   serial ++;
  }
 }
 *(store + cnt) = 0;//最后一个元素的下一位设零
 return store;//返回指针
 free(store);//释放空间
}
int main(){
 int scale;//输入范围
 scanf("%d", &scale);
 for(int i = 0; * (allPrime(scale) + i) != 0; i ++){//i代表元素
  /*判断条件就是当前指针元素是否非零,非零就输出来,为零,说明结束*/
  printf("%d ", * (allPrime(scale) + i));//取出指针中的值
 }
 printf("\n");
}
发表于 2019-12-24 12:22:03 回复(1)