首页 > 其他分享 >C语言之求任意次方的最后三位

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

时间:2024-03-21 11:30:52浏览次数:38  
标签:之求 num 取模 int 复杂度 C语言 base 次方 1000

目录

一 简介

二代码实现

三 时空复杂度


一 简介

在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,其二进制位数不会超过log_2y+1,所以整个函数的时间复杂度为O(log_2y)

  2. 空间复杂度:

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

综上所述,这段代码的时间复杂度为O(log_2y),空间复杂度为O(1)(常数空间)。

标签:之求,num,取模,int,复杂度,C语言,base,次方,1000
From: https://blog.csdn.net/m0_61635718/article/details/136865472

相关文章

  • C语言之计算某日是该年的第几天
    目录一简介二代码实现三时空复杂度一简介 在C语言中,计算某日是该年的第几天通常涉及以下步骤:判断输入的年份是否为闰年。根据判断结果,确定当年二月的天数(28或29天)。然后,根据月份从前几个月开始累计天数。二代码实现以下是一个简单的C语言函数示例,它接收一......
  • c语言运用,猜数字小游戏设计
    我们要用c语言做一个猜数字小游戏,就是在1-100的数字中随机生成一个数字,然后我们去猜测那个生成的数字。做这个游戏,那我们需要的是一个整体的思想,做一个游戏需要有哪些部分?一开始可能会没有头绪,但是只要顺着一条线的思维,想一想要做的游戏刚开始是什么样子,玩的时候是什么样子,游......
  • c语言(自定义类型——结构体)
    C语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要名字、年龄、学号、⾝⾼、体重等;描述⼀本书需要作者、出版社、定价等。C语⾔为了解决这个问题,增......
  • 【数据结构和算法初阶(C语言)】二叉树的顺序结构--堆的实现/堆排序/topk问题详解---二
     目录 ​编辑1.二叉树的顺序结构及实现1.1二叉树的顺序结构2堆的概念及结构3堆的实现3.1堆的代码定义3.2堆插入数据3.3打印堆数据3.4堆的数据的删除3.5获取根部数据3.6判断堆是否为空3.7堆的销毁 4.建堆以及堆排序 4.1堆排序---是一种选择排序4.2升......
  • 每日一题:C语言经典例题之实数的小数部分
    题目描述输入一个实数,输出该实数的小数部分,小数部分若多余的末尾0,请去掉。如输入111111.12345678912345678900则输出0.123456789123456789。若去掉末尾0之后小数部分为0,则输出“Nodecimalpart”。注意该实数的位数不超过100位。输入输入一个实数。输出输出该实数的小......
  • C语言的指针详解
    一、指针的定义及使用1.指针是什么?指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以......
  • C语言——复制字符串
    题目描述:有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。输入:数字n,一行字符串,数字m。输出:从m开始的子串。代码如下:代码一:#include<stdio.h>#include<stdlib.h>intmain(){intn,i=0,j,m;charc[20];......
  • 你真的了解c语言的10大字符串函数吗?
    乐观学习,乐观生活,才能不断前进啊!!!我的主页:optimistic_chen我的专栏:c语言点击主页:optimistic_chen和专栏:c语言,创作不易,大佬们点赞鼓励下吧~前言:长度不受限制的字符串函数-strcpy,strcat,strcmp长度受限制的字符串函数-strncpy,strncat,strncmp文章目录前言:1.st......
  • 【leetcode】135_candy糖果题_贪心算法_C语言_唐完了之后是?(雾
    原题如下:(蓝字为原题链接,可跳转查看)135.分发糖果n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并......
  • C语言游戏实战(4):人生重开模拟器
     前言:人生重开模拟器是前段时间非常火的一个小游戏,接下来我们将一起学习使用c语言写一个简易版的人生重开模拟器。 网页版游戏:人生重开模拟器(ytecn.com)1.实现一个简化版的人生重开模拟器(1)游戏开始的时候,设定初始属性:颜值,体质,智力,家境(2)开始游戏,随机生成性别和出生......