• 2023-01-06
    筛法求素数的核心操作就是在一个按a[2]=2,a[3]=3,......,a[N]=N初始化的数组中依次筛掉所有素数的倍数。
  • 内容

    • 0

      设计用埃拉托斯特尼筛法求正整数N以内的所有素数的算法.

    • 1

      阅读以下说明和C程序,填充程序中的空缺。 [说明] 埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划去;剩下的数中最小者为3,3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5,5是素数(输出),再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数构成的序列就是不超过N的全部质数。 下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sieve[i](u>0)的下标i对应自然数i,sieve[i]的值为1/0分别表示i在/不在序列中,也就是将i划去(去掉)时,就将sieve[i]设置为0。 [C程序] #include <stdio.h> #define N 10000 int main() char sieve[N+1]=(0); int i=0,k; /*初始时2~N都放入sieve数组*/ for(i=2;______;i++) sieve[i]=1; for(k=2;;) /*找出剩下的数中最小者并用K表示*/ for(;k<N+1&&sieve[k]==0;______); if(______)break; print("%d\t",k); /*输出素数*/ /*从Sieve中去掉k及其倍数*/ for(i=k;i<N+1;i=______) ______; return 0; /*end of main*/[/i][/i][/i][/i]

    • 2

      输入一个正整数n,再输入n个正整数,判断它们是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

    • 3

      编写一个程序完成“菜单”功能。提供三种选择途径: (1)求水仙花数(narcissus number),找出100至999之间的所有水仙花数。 (2)求出素数(prime number),找出2至n之间的所有素数。 (3)求Faibonacci数列前n项的值。

    • 4

      输入n个整数,求出其中最大数及其所在的位置,以及此n个数中素数的个数。 提示:定义一个数组,然后将这n个数依次存放于数组中,逐一比较求出最大值,再逐一判断其是否为素数,如果是素数,则素数的个数增加1。