首页 > 其他分享 >密码工程-小素数

密码工程-小素数

时间:2024-06-06 15:22:29浏览次数:21  
标签:工程 int len 密码 素数 printf include plist

任务详情

  1. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,使用git管理过程,至少提交三次

  2. 参考《密码工程》p107伪代码基于Eratosthenes算法实现 int SmallPrimeList(int n, int *plist, int *len), 其中plist返回素数列表,len返回列表长度(5’)

  3. 写出测试代码,至少包括 n=2, n=你的四位学号,n>2^20次方的测试代码,提交代码和运行结果截图,git log截图(10)

  4. 提交使用Markdown并转为PDF,或者使用doc,docx格式

任务内容

1、测试代码

点击查看代码
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
  
// 标记函数,用于标记合数  
void markComposites(int *isPrime, int n) {  
    for (int p = 2; p * p <= n; ++p) {  
        if (isPrime[p]) {  
            for (int i = p * p; i <= n; i += p) {  
                isPrime[i] = 0; // 标记为合数  
            }  
        }  
    }  
}  
  
// 生成小于等于n的所有素数列表  
int SmallPrimeList(int n, int *plist, int *len) {  
    // 如果n小于2,没有素数  
    if (n < 2) {  
        *len = 0;  
        return 0;  
    }  
  
    // 分配内存来标记是否为素数  
    int *isPrime = (int *)calloc(n + 1, sizeof(int));  
    if (isPrime == NULL) {  
        return -1; // 分配内存失败  
    }  
  
    // 初始化所有数字为素数(除了0和1)  
    for (int i = 2; i <= n; ++i) {  
        isPrime[i] = 1;  
    }  
  
    // 标记合数  
    markComposites(isPrime, n);  
  
    // 填充plist并计算素数数量  
    int count = 0;  
    for (int i = 2; i <= n; ++i) {  
        if (isPrime[i]) {  
            plist[count++] = i;  
        }  
    }  
  
    // 释放内存  
    free(isPrime);  
  
    // 设置返回的长度  
    *len = count;  
  
    return 0; // 成功  
}  
  
int main() {  
    int n;  
    printf("Enter a positive integer n (not greater than 2^20): ");  
    scanf("%d", &n); // 从用户处获取输入  
  
    // 检查输入是否为正整数且不超过2的20次方  
    const int MAX_N = 1 << 20; // 2的20次方  
    if (n <= 0 || n > MAX_N) {  
        printf("n must be a positive integer less than or equal to 2^20.\n");  
        return 1; // 输入错误,退出程序  
    }  
  
    // 根据n的大小动态分配plist的内存  
    int *plist = (int *)malloc(MAX_N * sizeof(int)); // 分配足够的空间来容纳最多MAX_N个素数  
    if (plist == NULL) {  
        printf("Memory allocation failed.\n");  
        return 1; // 内存分配失败,退出程序  
    }  
  
    int len = 0;  
  
    // 生成素数列表  
    int result = SmallPrimeList(n, plist, &len);  
    if (result == 0) {  
        printf("Prime numbers less than or equal to %d are:\n", n);  
        for (int i = 0; i < len; ++i) {  
            printf("%d ", plist[i]);  
        }  
        printf("\n");  
    } else {  
        printf("Error occurred during prime number generation.\n");  
    }  
  
    // 释放plist内存  
    free(plist);  
  
    return 0;  
}
2、测试结果

image

标签:工程,int,len,密码,素数,printf,include,plist
From: https://www.cnblogs.com/GJH6/p/18235110

相关文章

  • 密码工程-扩展欧几里得算法
    任务要求在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,要用git记录实现过程,gitcommit不能低于5次严格按照《密码工程》p112伪代码实现ExtendedGCD(inta,intb,int*k,int*u,int*v)算法(10')2.根据ExtendedGCD实现计算有限域模除的函数intModDiv(inta,in......
  • 从提示工程到代理工程:构建高效AI代理的策略框架概述
    自ChatGPT推出以来,仅仅一年多的时间里,公众对于“人工智能”(AI)的认识已经发生了根本性的变化。这种变化部分源于公众意识的提高,更多则是基于这样一个认识:AI驱动的系统不仅可能,而且可能已经具备了与人类相当的能力和表现。ChatGPT不仅是AI能力的一个验证,更是半个多世纪以来AI研究成......
  • mybatis逆向工程generatorConfiguration配置
      <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEgeneratorConfigurationPUBLIC"-//mybatis.org//DTDMyBatisGeneratorConfiguration1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"&......
  • 【PB案例学习笔记】-03用户名密码校验
    写在前面这是PB案例学习笔记系列文章的第3篇,该系列文章适合具有一定PB基础的读者。通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.gi......
  • 文件夹如何加密码全攻略,5个文件夹加密方法新手也能学
    文件夹如何加密码?在这个互联网时代,隐私保护越来越受到大家的重视。我们在日常工作中,有时候会接触一些比较重要的文件,为了不让这些文件信息被泄露,所以我们可以给文件夹设置密码保护。那要怎么给文件夹设置密码呢?今天小编就来给大家分享5个文件夹加密码的方法,希望可以通过这篇文......
  • 前端实现输入内容计算密码强度
    提示:记录工作中遇到的需求及解决办法文章目录前言一、思路二、计算密码强度分数密码强度动画展示效果完善动画效果完整代码前言平时我们在浏览各种网站和APP的时候,都接触过密码这个东西~密码设置的好不好,关乎到你的账号安全性,越复杂的密码越安全,所以密......
  • 【EI会议征稿通知】第四届能源工程与电力系统国际学术会议(EEPS 2024)
    第四届能源工程与电力系统国际学术会议(EEPS2024)20244th InternationalConferenceonEnergyEngineeringandPowerSystems   第四届能源工程与电力系统国际学术会议(EEPS2024),将于2024年8月9-11日在杭州召开,由杭州电子科技大学主办,杭州电子科技大学自动化学院承办......
  • 【预计IEEE出版】第四届电子信息工程与计算机技术国际学术会议(EIECT 2024)
       第四届电子信息工程与计算机技术国际学术会议(EIECT2024)20244thInternationalConferenceonElectronicInformationEngineeringandComputerTechnology2024年11月15-17日|中国深圳#往届均已成功见刊、EI检索;先投稿,先送审,先录用!快至投稿后三天录用!重要......
  • 软件工程-三 团队缺乏的不只是管理
     团队:团队至少是以三个人为规模的。这有其合理性。为什么呢?首先一个人算不得团队,那是个体。两个人则互相支撑,古文中“从”字是二人互立,就是这个意思。然而二人互立并不算团队,因为没有监督。三个人便可以构成团队,这样便有了团队的一些基本特性:主从、监督和责任。做管理起码要......
  • 基于振弦采集仪的土木工程安全监测技术研究
    基于振弦采集仪的土木工程安全监测技术研究随着土木工程的发展,安全监测成为了非常重要的一部分。土木工程的安全监测旨在及早发现结构的变形、位移、振动等异常情况,以便及时采取措施进行修复或加固,从而保障工程的安全运行。振弦采集仪作为一种常用的安全监测设备,被广泛应用于土木......