数据结构题目:素数判断的算法设计分析与对比

1、实验目的

素数判断的算法设计分析与对比.

2、实验具体要求

输出所有小于等于n(n为一个大于2的正整数,比如100)的素数,要求:

  1. 每行输出10个素数;
  2. 尽可能采用较优算法。

3、实验设计思路(编程语言、模块划分及函数功能描述等)

选择C语言作为编程语言。

模块划分及函数功能描述:

主函数模块 (main函数中)

负责程序的入口,读取用户输入的正整数n,调用其他模块的函数来找出并打印小于等于n的所有素数。

素数检查模块 (is_prime.c或相关函数)

包含一个或多个函数,用于检查给定的整数是否为素数。

函数功能描述

main函数

初始化变量,如n(用户输入的正整数)和count(用于计数已找到的素数数量)。使用printf函数提示用户输入一个正整数。使用scanf函数读取用户输入的n。调用is_prime函数(或类似函数)来检查从2到n的每个整数是否为素数。对于每个素数,使用printf函数打印出来,并增加count计数器的值。当count是10的倍数时,输出一个换行符,以便每行打印10个素数。在循环结束后,如果最后一行打印的素数不足10个,输出一个额外的换行符以保持格式整洁。

is_prime函数

接收一个整数num作为参数。

如果num小于等于1,返回 false(或 0,具体取决于函数返回类型)。

如果num是2或3,返回 true(或 1)。

如果num能被2或3整除,返回 false。

使用一个循环,从5开始,每次增加6(检查形如6k±1的数,其中k是自然数),直到i * i大于num。在循环中,检查num是否能被i或i+2整除。

如果在循环中找到了任何能整除num的数,返回false。

如果循环结束都没有找到能整除num的数,返回true。

(3).实验流程:

<1>编写main函数,初始化变量并提示用户输入。

<2>编写is_prime函数来检查素数。

<3>在main函数中调用is_prime函数来查找并打印素数。

<4>编译并运行程序,测试不同的输入值,确保程序按预期工作。

<5>如有需要,进行代码调试和优化,提高程序的效率和健壮性。

4、实验源程序、程序调试结果

源程序:

#include <stdio.h>  
#include <stdbool.h>  
  
// 函数声明  
bool isPrime(int num);  
  
int main() {  
    int n, count = 0;  
    printf("Enter a positive integer greater than 2: ");  
    scanf("%d", &n);  
  
    printf("Prime numbers less than or equal to %d are:\n", n);  
  
    for (int i = 2; i <= n; ++i) {  
        if (isPrime(i)) {  
            printf("%d ", i);  
            ++count;  
  
            // 如果已经输出了10个素数,则换行  
            if (count % 10 == 0) {  
                printf("\n");  
            }  
        }  
    }  
  
    // 如果最后一行素数不足10个,则换行  
    if (count % 10 != 0) {  
        printf("\n");  
    }  
  
    return 0;  
}  
  
// 函数定义:检查一个数是否为素数  
bool isPrime(int num) {  
    if (num <= 1) {  
        return false;  
    }  
    if (num <= 3) {  
        return true;  
    }  
    if (num % 2 == 0 || num % 3 == 0) {  
        return false;  
    }  
  
    // 只检查到sqrt(num)即可  
    for (int i = 5; i * i <= num; i += 6) {  
        if (num % i == 0 || num % (i + 2) == 0) {  
            return false;  
        }  
    }  
  
    return true;  
}

调式结果:

5.程序调试过程中遇到的问题及解决办法

问题:如果用户输入的不是一个整数或者是一个负数,程序可能不会按照预期工作。
解决方法:可以添加额外的输入验证来确保用户输入的是一个正整数。这可以通过使用scanf的返回值和getchar函数来读取并丢弃额外的非数字字符来实现。

6、实验收获与体会

加深了对素数概念的理解:通过实现素数检查算法,我更加深入地理解了素数的定义和性质。

熟悉了C语言的基本语法和库函数:我使用了printf、scanf、sqrt等函数,并熟悉了C语言中的循环和条件语句。

了解了优化策略:通过实现只检查到sqrt(i)的优化,我了解了在编程中优化性能的重要性。

提高了跨平台意识:我意识到使用特定于平台的函数(如system("pause"))可能会限制程序的可移植性。

 原创作品,感谢各位比奇堡居民鼎力支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值