C语言之求任意次方的最后三位

这篇具有很好参考价值的文章主要介绍了C语言之求任意次方的最后三位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一 简介

二代码实现

三 时空复杂度


一 简介

在C语言中,求一个整数任意次方的最后三位数可以使用快速幂算法结合取模运算来实现。

二代码实现

#include <stdio.h>

// 使用快速幂算法计算 x 的 y 次方对 1000 取模的结果
int lastThreeDigits(int x, int y) {
    int result = 1;
    int base = x % 1000; // 先将x取模以确保结果始终是最后三位

    while (y > 0) {
        if (y % 2 == 1) { // 如果y为奇数,则乘以当前base
            result = (result * base) % 1000;
        }
        y /= 2; // 将y减半
        base = (base * base) % 1000; // 并且平方base值并取模
    }

    return result;
}

int main() {
    int num, power;
    
    printf("请输入底数:");
    scanf("%d", &num);
    printf("请输入指数:");
    scanf("%d", &power);

    int last_digits = lastThreeDigits(num, power);
    printf("底数 %d 的 %d 次方的最后三位数字是:%d\n", num, power, last_digits);

    return 0;
}

该代码首先通过取模操作将输入的底数x限制在最后三位以内,然后利用快速幂算法(这里采用的是二进制分解优化)逐步计算出xy次方对1000取模后的结果。这样得到的就是最后三位数。每次循环中,先判断指数是否为奇数决定是否需要与结果相乘,然后再将指数和底数同时进行除2和平方的操作,并始终保持在对1000取模的状态下。最后返回的结果即为所求的最后三位数。

三 时空复杂度

时间复杂度和空间复杂度分析:

  1. 时间复杂度: 这段代码中,lastThreeDigits函数采用了快速幂算法,该算法的时间复杂度通常表示为O(log y)。在每次循环中,我们通过将指数y不断除以2来减小其大小,直到y变为0为止。因此,循环的次数大致等于输入指数y的二进制位数。对于任意整数y,其二进制位数不会超过C语言之求任意次方的最后三位,C语言算法,c语言,算法,开发语言,所以整个函数的时间复杂度为。

  2. 空间复杂度:

    • 函数内部使用的变量包括resultbasey,这些都在栈上分配,无论输入的指数y如何变化,所需的空间都是固定的。
    • main函数中,用于存储用户输入的numpower也占用固定的空间。

综上所述,这段代码的时间复杂度为,空间复杂度为O(1)(常数空间)。文章来源地址https://www.toymoban.com/news/detail-843046.html

到了这里,关于C语言之求任意次方的最后三位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言简单程序——解二元一次方程

    这个任务我们可以用 if,else if 函数,我们还要调用函数库 #include math.h, 就可以完成 这个小程序。 运行后显示如下。    

    2024年02月06日
    浏览(56)
  • 基于C++/Java实现一个数的 N 次方根算法完整源码实现

    给定两个数 N 和 A,求 A 的 N 次方根。在数学中,数 A 的 N 次方根是一个实数,当我们将 A 的整数次幂 N 求出时,它给出 A。这些根用于数论和其他领域数学的高级分支。  例子:   由于这个问题涉及一个实值函数 A^(1/N),我们可以使用牛顿法来解 决这个问题,该方法从初始

    2024年02月07日
    浏览(37)
  • C语言----------最后一个单词的大小

    1.计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾) (1)这里主要是遍历数组,而且这个字符数组应该从后向前进行遍历; (2)srelen需要包含头文件,因为字符串的最后是斜杠0,所以i的初始值是len-1,依次从后向前

    2024年02月21日
    浏览(33)
  • 【C语言】指针的“最后一站”【进阶版】

    目录 1、字符指针 2、指针数组 3、数组指针 3.1数组指针的定义 3.2数组指针的使用  4、数组指针和指针数组的区别 5、数组参数,指针参数 5.1数组参数定义 5.2指针参数定义  5.3一维数组传参 5.4二维数组传参 5.5一级指针传参 5.6二级指针传参  6、函数指针 7、函数指针数组 8、

    2024年02月09日
    浏览(28)
  • 初始C语言最后一章《编译、链接与预处理详解》

    感谢老铁们的陪伴和支持,初始C语言专栏在本章内容也是要结束了,这创作一路下来也是很不容易,如果大家对 Java 后端开发感兴趣,欢迎各位老铁来我的Java专栏!当然了,我也会更新几章C语言实现简单的数据结构!不过由于我是Java 技术栈的,所以如果以后有机会学习C

    2024年04月16日
    浏览(43)
  • 【Python】【数据结构和算法】保留最后N个元素

    使用 deque ,指定 maxlen 参数的值为N,例如: Python Cookbook 1.3

    2024年02月11日
    浏览(63)
  • 算法leetcode|58. 最后一个单词的长度(rust重拳出击)

    给你一个字符串 s ,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 1 = s.length = 10 4 s 仅有英文字母和空格 ’ ’ 组成 s 中至少存在一个单词 面对这道算法题目,二当家的

    2024年02月13日
    浏览(52)
  • C语言实现任意栈之间的进制转换

            利用栈,将十进制数字N转换为D进制(D=2,8,16),其中16进制对应的符号是0~9,A~F。         要求:十进制数字和N进制从键盘输入获得,从屏幕显示进制转换后的数字。 代码: 效果图:

    2024年02月06日
    浏览(41)
  • Rust编程语言入门之最后的项目:多线程 Web 服务器

    在 socket 上监听 TCP 连接 解析少量的 HTTP 请求 创建一个合适的 HTTP 响应 使用线程池改进服务器的吞吐量 优雅的停机和清理 注意:并不是最佳实践 创建项目 main.rs 文件 修改一: 修改二: 修改三: 修改四: 修改五: hello.html 文件 404.html 文件 单线程Web服务器 开启线程 lib.r

    2023年04月25日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包