C语言实现梅森素数的判断与输出 - 算法解析
C语言实现梅森素数的判断与输出 - 算法解析
题目: 梅森素数是指等于2的整数次幂减1的素数。例如:7是梅森素数,它等于2的3次方减1。示例程序为输出100以内的梅森素数,运行结果如样张所示。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int msprime(int m )
{
int i = 2,k,p;
while ( i <= m && (m%i))
i++;
if(m==i)
{
for(k=1;;k++)
{
p=pow(2,k)-1;
if(p>m)
break;
else if(p==m)
return k;
}
}
return 0;
}
int main()
{
int m,k;
for(m=2;m<=100;m++)
if (k=msprime(m))
printf('%d=2^%d-1\n',m,k);
return 0;
}
分析:
#include <stdio.h>:引入标准输入输出库函数,用于实现基本输入输出功能,例如printf和scanf。#include <string.h>:引入字符串处理库函数,用于处理字符串,例如strcpy和strlen。#include <ctype.h>:引入字符处理库函数,用于处理字符,例如isalpha和isdigit。#include <math.h>:引入数学库函数,用于实现数学运算,例如pow和sqrt。int msprime(int m):定义函数msprime,参数为m,返回值为整型,用于判断m是否为梅森素数。int i=2,k,p;:定义整型变量i、k、p,初始值分别为 2、0、0。其中i用于判断素数,k用于记录梅森素数的指数,p用于计算 2 的k次方减 1 的值。while ( i <= m && (m%i)) i++;:循环遍历 2 到m之间的数字,如果m对i取模不为 0,则i自增 1。该循环用于判断m是否为素数。if(m==i):如果m等于i,则m是素数,进入判断梅森素数的循环。for(k=1;;k++):定义循环变量k,初始值为 1,循环条件为无限循环,用于判断 2 的k次方减 1 是否等于m。p=pow(2,k)-1;:计算 2 的k次方减 1 的值,赋给变量p。if(p>m) break;:如果p大于m,则说明 2 的k次方减 1 大于m,退出循环。else if(p==m) return k;:如果p等于m,则说明m是梅森素数,返回k的值。return 0;:如果没有找到符合条件的k值,返回 0,表示m不是梅森素数。int main():主函数,程序的入口。int m,k;:定义整型变量m和k,m用于循环遍历,k用于存储msprime函数的返回值。for(m=2;m<=100;m++):循环遍历 2 到 100 之间的数字,判断每个数字是否为梅森素数。if (k=msprime(m)):如果msprime(m)的返回值不为 0,则说明m是梅森素数,将返回值赋给k。printf('%d=2^%d-1\n',m,k);:输出m和k的值,表示m是 2 的k次方减 1 的梅森素数。return 0;:程序正常结束。
该程序使用了 pow 函数来计算 2 的 k 次方,并通过循环判断 2 的 k 次方减 1 是否等于 m。程序的逻辑清晰,代码易于理解,能够正确输出 100 以内的所有梅森素数。
原文地址: https://www.cveoy.top/t/topic/npO5 著作权归作者所有。请勿转载和采集!