C语言例程:利用数组求前 n 个质数

该文章介绍了一种算法,通过数组存储已找到的质数,判断并找到前n个质数。从数字3开始,利用已知质数测试新数字的整除性,跳过偶数(除了2),直到找到第n个质数。程序代码展示了如何实现这个过程,并在C语言中进行了演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用数组求前 n 个质数

要求确定一个数 m 是否是质数,可以用已求出的质数对 m 的整除性来确定。

实例解析

对任意整数 m,如果它不能被小于它的质数整除,则 m 也是质数。引入质数表 primes[],已
求得的质数个数为 pc。求前 n 个质数的过程可用以下算法描述:

[算法]求前 n 个质数

{
	 primes[0]=2;/*2 是第一个质数*/ 
	 pc=1;/*已有一个质数*/ 
	 m=3;/*被测试的数从 3 开始*/ 
	 while(pc<N) 
	 { 
		 调整 m,使 m 为下一个质数; 
		 primes[pc++]=m; 
		 m+=2;/*除 2 外,其余质数均是奇数*/
	} 
	 输出 primes[0]至 primes[pc-1]; 
 }

为调整 m 使它是下一个质数,可按顺序用已求得的质数 primes[k]去测试它对 m 的整除性。
如果 m 能被某个 primes[k]整除,则 m 是合数,让 m 增 2,并重新从第一个质数开始对它测试。
数 m 为质数的条件是存在一个 k,使得 primes[0] 至 primes[k-1]不能整除 m,且“primes[k]*
primes[k]>m”成立。代码描述如下:

k=0; 
 while(primes[k]*primes[k]<=m) 
 if(m%prime[k]==0) 
 { 
 /*m 是合数*/ 
 m+=2;/*让 m 取下一个奇数*/ 
 k=1;/*不必用 primes[0]=2 去测试 m*/ 
 } 
 else 
 k++;/*继续用下一个质数去测试*/

程序代码

#include <stdio.h>
// system("cls");/* 清屏 */
void clrscr(){
    system("cls");/* 清屏 */
}

//利用数组求前 n 个质数
#define N 50
int main()
{

     int primes[N];
     int pc,m,k;
     clrscr();
     printf("\n The first %d prime numbers are:\n",N);
     primes[0]=2;/*2 是第一个质数*/
     pc=1;/*已有第一个质数*/
     m =3;/*被测试的数从 3 开始*/
     while(pc<N)
     {
         /*调整 m 使它为下一个质数*/
         k=0;
         while(primes[k]*primes[k]<=m)
         if(m%primes[k]==0)
         {/*m 是合数*/
            m+=2;/*让 m 取下一个奇数*/
            k=1;/*不必用 primes[0]=2 去测试 m,所以 k 从 1 开始*/
         }
         else
         k++;/*继续用下一个质数去测试*/
         primes[pc++]=m;
         m+=2;/*除 2 外,其余质数均是奇数*/
     }
     /*输出 primes[0]至 primes[pc-1]*/
     for(k=0;k<pc;k++)
        printf("%4d",primes[k]);
     printf("\n\n Press any key to quit...\n ");
     getch();
    return 0;
}

程序运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文斗士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值