精华内容
下载资源
问答
  • c语言筛选法求素数
    2021-05-21 16:25:48

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

    /**

    * @author 枳洛淮南

    * @version 1.0

    * @Description 功能

    * @Date 2021/3/30 下午 18:57

    */

    public class Main

    {

    //用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,

    // 将数组中2之后的所有能被2整除的数清0,

    // 再将3之后的所有能被3整除的数清0 ,

    // 以此类推,直到n为止。数组中不为0 的数即为素数。

    public static void main(String[] args) throws IOException

    {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String str = null;

    while ((str = br.readLine()) != null)

    {

    int num = Integer.parseInt(str);

    int[] array = new int[num - 1];

    for (int i = 0; i 

    {

    array[i] = i + 2;

    }   //将数组放进去

    for (int i = 2; i <= num / 2; i++)

    {

    for (int j = 0; j 

    {

    if (array[j] % i == 0 && array[j] != i)

    {

    array[j] = 0;

    }

    }

    }

    StringBuilder sb = new StringBuilder();

    int count = 0;

    for (int j : array)

    {

    if (j != 0)

    {

    sb.append(j).append(" ");

    } else

    {

    count++;

    }

    }

    System.out.println(sb.toString() + "\n" + count);

    }

    }

    }

    更多相关内容
  • C语言筛选法求素数

    千次阅读 多人点赞 2020-04-01 14:13:50
    素数的定义:素数也即质数;在大于1的自然数中,除了1和他本身以外没有其他的因数,我们称之为素数。 问题:出1-100之内的素数。 方法1,利用定义直接遍历 #include<stdio.h> #include<math.h> //...

    素数的定义:素数也即质数;在大于1的自然数中,除了1和他本身以外没有其他的因数,我们称之为素数。

    问题:求出1-100之内的素数。

    方法1,利用定义直接遍历
    #include<stdio.h>
    #include<math.h>
    //思路:优化了j的范围而非(2-i)因为如果一个数不能被从2到其开方的数整除,其即为素数
    //时间复杂度:nlog2n
    void main()
    {
        int i,j,k;
        for(i=1;i<=100;i++)
            {
               int k = sqrt(i);
                for(j=2;j<=k;j++)
                {
                    if(i%j==0)
                        break;
                }
                if(j>k)//全部循环完后,j>k,此时就是素数;因为只要中途退出一次就有j<=k
                printf("%4d",i);
            }
    }
    
    方法二,利用数组筛选

    1.原理:1-100存放于数组中,首先1不是素数,筛掉;从2开始,能被整除的,即2的倍数,都不是,筛掉;然后是3,3的倍数筛掉;然后是5,7,11…
    2. 思路:设置一个容量100的数组存放1-100;初始值为0;如果不为素数,置为1表示筛掉;最后遍历数组输出值为0的元素即可。
    3. 目的:本例使用数组筛选的目的是使时间复杂度将到最低,所以还有其他利用数组筛选的方法。

    #include<stdio.h>
    #include<math.h>
    #define N 100
    int main()
    {
        int arr[N]={0}; //使用(索引+1)表示1-100个数
        arr[0]=1;        //1不是素数,首先筛选出来
        int i;          //i表示索引,也即元素
        for(i=2;i<=N;i++)    //第一轮:筛选掉2的倍数,
        {
           if(i%2==0)
           {
               arr[i-1] = 1;
           }
        }
        arr[1] = 0; //2是素数,因为2也是2的倍数会在第一轮中被误筛
        for(i=3;i<sqrt(N);i+=2) 
        {
            if(arr[i-1]==0) //在第一轮筛选后的元素中继续筛选
            {
                //j表示3-100的元素;
                //目的是将3的倍数置为1,依次4的倍数...
                //注意这里的初值为i*i,增量为2*i
                //之所以可以这么做,是因为3的倍数,除了本身,即乘1之外,乘2,为2的倍数(第一轮筛掉了),然后就是3乘3,所以初值为i*i;
                //同理,3*4,pass;3*5=3*3+3*2;所以增量为2*i;依次...
                for(int j=i*i;j<=N;j+=2*i)
                {
                    arr[j-1]=1;
                }
            }
        }
        //打印数组
        for(i=0;i<N;i++)
        {
            if(arr[i]==0)
            {
                printf("%2d ",i+1);
            }
        }
        return 0;
    }
    

    参考来源:https://blog.csdn.net/weixin_38679924/article/details/88536802
    有其他更简单的方法,欢迎指出。

    展开全文
  • C语言筛选法求素数

    2022-05-22 16:07:30
    筛选法求n以内的素数筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。 输入...

        

                                                  

    描述

    用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。

    输入描述:

    多组输入,每行输入一个正整数(不大于100)。

    输出描述:

    针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,

    第二行,输出数组中2之后被清0 的个数。每行输出后换行。

    示例1

    输入:

    20

    输出:

    2 3 5 7 11 13 17 19
    11

    代码展示:

    #define _CRT_SECURE_NO_WARNINGS 
    #include<stdio.h>
    int main()
    {
    	printf("描述\n");
    	printf("用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。\n");
    	printf("输入描述:多组输入,每行输入一个正整数(不大于100)。\n");
    	printf("输出描述:针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,第二行,输出数组中2之后被清0 的个数。每行输出后换行。\n");
    	printf("示例1\n");
    	printf("输入:20\n");
    	printf("输出:\n");
    	printf("2 3 5 7 11 13 17 19\n");
    	printf("11\n");
    
    	int inputNum = 0;
    	int i = 0;
    	while (scanf("%d", &inputNum) != EOF)
    	{
    		int arr[120] = { 0 };
    		// 接收输入的数值。
    		for (i = 2; i <= inputNum; i++)
    		{
    			arr[i] = i;
    		}
    
    		// 对素数进行筛选判断。
    		int j = 0;
    		int k = 0;
    		for (j = 2; j <= inputNum; j++)
    		{
    			for (k = j + 1; k <= inputNum; k++)
    			{
    				if (arr[k] % j == 0)
    				{
    					arr[k] = 0;
    				}
    			}
    		}
    
    		// 打印数组中的素数/并且监控0的个数
    		int zeroCount = 0;
    		for (i = 2; i <= inputNum; i++)
    		{
    			if (arr[i] != 0)
    			{
    				printf("%d ",arr[i]);
    			}
    			else
    			{
    				zeroCount++;
    			}
    		}
    		printf("\n%d\n",zeroCount);
    
    	}
    
    	return 0;
    }

    代码运行:

    牛客测试:

    方法二:(试除法)

    // - 试除法
    #define _CRT_SECURE_NO_WARNINGS 
    #include<stdio.h>
    int main()
    {
    	printf("描述\n");
    	printf("用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。\n");
    	printf("输入描述:多组输入,每行输入一个正整数(不大于100)。\n");
    	printf("输出描述:针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,第二行,输出数组中2之后被清0 的个数。每行输出后换行。\n");
    	printf("示例1\n");
    	printf("输入:20\n");
    	printf("输出:\n");
    	printf("2 3 5 7 11 13 17 19\n");
    	printf("11\n");
    
    	int inputNum = 0;
    	int zeroCount = 0;
    	while (scanf("%d", &inputNum) != EOF)
    	{
    		int i = 0;
    		int j = 0;
    		// 试除求素数
    		for (i = 2; i <= inputNum; i++)
    		{
    			for (j = 2; j < i ; j++)
    			{
    				if (i % j == 0)
    				{
    					zeroCount++;
    					break;
    				}
    			}
    			if (i == j)
    			{
    				printf("%d ",i);
    			}
    		}
    		printf("\n%d\n",zeroCount);
    
    
    	}
    
    	return 0;
    }

    代码运行:

    展开全文
  • c语言筛选法求素数

    千次阅读 2017-01-23 10:19:09
    使用了动态内存分配,给定区间里面所有的素数, #include #include int main() { int n,i,a,b;int *p; scanf("%d",&n); p=(int *)calloc(n,sizeof(int)); for(i=2;i { if(*(p+i)==0) for(a=2;a*i *(p+...

    使用了动态内存分配,求给定区间里面所有的素数,

    #include<stdlib.h>
    #include<stdio.h>
    int main()
    {
    int n,i,a,b;int *p;
    scanf("%d",&n);
    p=(int *)calloc(n,sizeof(int));
    for(i=2;i<=n;i++)
    {
    if(*(p+i)==0)
    for(a=2;a*i<=n;a++)
    *(p+(a*i))=1;
    }
    for(i=2;i<=n;i++){
    if(*(p+i)==0)
    printf("%dn",i);
    }

    return 0;
    }

    参考了网上的筛选法,自己添加的动态内存。

    因为不知道具体操作时候的内存有多大,所以使用了动态内存

    展开全文
  • C语言筛选法求素数

    千次阅读 2018-04-23 21:11:36
    筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3...
  • c语言之筛法求素数

    2021-11-10 21:46:52
    不超过自然数N(N>1)的所有素数的一种方法。据说是古希腊数学家埃拉托斯特尼(约公元前274~194年)发明的,又称埃拉托斯特尼筛。 具体做法是:先把N个自然数依次排列起来。1不是素数,也不是合数,要...
  • 我们知道一个数无论他是素数还是合数,那么他的倍数一定是合数!!! 赞同??? 而合数c = 因数a X 因数b 比如16 = 1x16=2x8=4*4; 而[2,4]区间的所有数字的倍数都是合数,剩下的则就是素数了 这里说的是大于1倍,比如3的倍数...
  • C语言丨筛法求素数质数

    千次阅读 2021-12-17 11:22:53
    素数质数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。素数被广泛用于密码学、汽车变速箱齿轮设计、害虫的生物生长周期与杀虫剂使用之间的关系、导弹...本文就来介绍求素数的一种方法:筛
  • C语言】 利用筛选法求100以内的素数

    万次阅读 多人点赞 2018-10-27 09:41:29
    //C语言 筛选法求100以内的素数 //原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质 //数的倍数筛掉。 //我们将从2开始 用2除后面的数...
  • C语言--求质数(详解)(筛选求质数
  • 常规: #include<stdio.h> #include<math.h> int main() { int i,j,k,n=0; for(i=2;i<=100;i++) { k=(int)sqrt(i); for(j=2;j<=k;j++) if(i%j==0) break; if(j>k) { printf("%d ...
  • 筛选法求100之内的素数 解析: 素数:约数为1和该数本身的数字称为素数,即质数 筛选法:又称为筛法。先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2...
  • 什么是筛选法筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把...
  • 什么是筛选法 所谓筛选法是指“埃拉托色尼筛法”,埃拉托色尼是古希腊的著名数学家。它采用的方法是,在一张纸上写上1~1000的全部整数,然后逐个判断他们是否为素数,只要找到一个非素数就把他去掉,最后剩下的数就...
  • C语言筛选法求100之内的素数

    千次阅读 2020-05-08 09:13:47
    } } printf("用筛选法求出的100以内的素数:\n"); for(i=1;i;i++) { if(a[i]!=0) { printf("%4d",a[i]); k++; } if(k%10==0) printf("\n"); } printf("\n"); return 0; } 具体解析可以参考这篇...
  • # 用筛选法求m和n之间的所有素数 大神帮忙看看怎么写这个代码 实在写不出来 ``` #include "stdio.h" main() { int a[1000]={0},i,j,m,n; scanf("%d%d",&m,&n); @@2 对数组作筛选法处理 @@2 ...
  • 题目:如何用C语言筛选法判断质数比如输出2质数4合数00代表程序的结束,如果输入不是零,程序可以继续打入数字判断写一个简单点的程序,小弟才刚刚学解答:楼上的别在那误导人,你那叫筛选法吗?先解释一下筛选法的步骤:...
  • 编写C语言程序,利用筛选法求100之内的素数,程序如下: #include<stdio.h> int main() { int i,j,a[101]; for(i=0;i<=100;i++) { a[i]=i; } for(i=2;i<=10;i++) { for(j=i+1;j<=100;j++) { if(a[j]%...
  • 筛选法求100之内的素数C语言 数组)

    万次阅读 多人点赞 2018-05-21 11:28:28
    1.解释下什么是筛选法? 筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3...
  • 1.首先解释下什么是筛选法筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,...
  • //用筛选法求100内的素数质数别名素数,指除了1和本身外无其他因数的自然数 #include<stdio.h> #include<math.h> int main() { int i,j,n,a[101]; for(i=1;i<=100;i++) //a[0]不用 { a[i...
  • 筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,490
精华内容 596
关键字:

c语言筛选法求素数