首页 > 其他分享 >1076 K尾相等数

1076 K尾相等数

时间:2024-08-15 18:28:02浏览次数:8  
标签:相等 start 1076 int tail ans include 1000

### 分析
我们需要找到两个自然数 \( M \) 和 \( N \) 使得 \( K^M \) 和 \( K^N \) 的末尾三位数相等,并且 \( M \) 和 \( N \) 的和最小。为了实现这一点,我们可以使用快速幂算法来计算 \( K^M \mod 1000 \) 和 \( K^N \mod 1000 \),并记录每个结果的最小指数。当我们找到两个相同的结果时,我们就可以计算 \( M + N \) 并输出最小的和。

### 伪代码
1. 读取输入的自然数 \( K \)。
2. 初始化一个数组 `tail` 用于记录每个结果的最小指数。
3. 使用快速幂算法计算 \( K^i \mod 1000 \)。
4. 如果结果在 `tail` 数组中已经存在,则输出当前指数和记录的最小指数的和。
5. 如果结果不在 `tail` 数组中,则记录当前指数。
6. 重复步骤3-5直到找到两个相同的结果。

### C++代码
 

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;

int quick(int a, int b, int c) {
    int ans = 1;
    a = a % c;
    while (b) {
        if (b & 1) ans = (ans * a) % c;
        b >>= 1;
        a = (a * a) % c;
    }
    return ans;
}

int main() {
    int k, tail[1000] = {0}, start = 0;
    scanf("%d", &k);
    for (int i = 1; i < 1000; i *= k)
        ++start;
    for (int i = start;; ++i) {
        int ans = quick(k, i, 1000);
        if (!tail[ans])
            tail[ans] = i;
        else {
            printf("%d\n", i + tail[ans]);
            break;
        }
    }
    return 0;
}

标签:相等,start,1076,int,tail,ans,include,1000
From: https://blog.csdn.net/huang1xiao1sheng/article/details/141143997

相关文章

  • 学费管理系统的设计与实现(10766)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • 《NET CLR via C#》---第五章(基元类型,引用类型和值类型,对象相等性和同一性,对象哈希码)
    基元类型编译器直接支持的数据类型称为基元类型(primitvietype),基元类型直接映射到Framework类库(FCL)中存在的类型。例如,C#的int直接映射到System.Int32类型。因此,以下4行代码都能正确编译,并生成完全相同的IL:inta1=0;//最方便的语法System.Int3......
  • 3224. 使差值相等的最少数组改动次数
    原题链接前情提要,结合原题解区的题解题解先简化问题,对于一对数\(a,b\),其中\(a\leqb\),要使其差为\(X\)的操作数是多少?分类讨论1.如果\(b-a==X\),操作数为\(0\)(不操作)2.如果\(X\ltb-a\),操作数为\(1\)(增加a或者减小b)3.如果\(X\in[b-a+1,k-a]\),操作数为\(1\)(增大b......
  • String类的其他功能,替换、去除空格、比较字符串相等 day11
    packagecom.shujia.day11;/*String类的其他功能:替换功能Stringreplace(charold,charnew)将字符串中所有的旧字符使用新字符进行替换,返回新的字符串Stringreplace(Stringold,Stringnew)将字符串中所有的旧字符串使用新......
  • 模拟实现strcmp,判断二个字符串是否相等
    1.判断二个字符串是否相等,可以模仿strcmp.当二个字符串相等的时候ruturn0.,当二个字符串小于时返回为小于0,当二个字符串大于时返回为大于0。const为不可以更改。//方法一intmy_strcmp(constchar*arr1,constchar*arr2){ assert(arr1&&arr2); while(*arr1==*arr2)......
  • 【大厂笔试】翻转、平衡、对称二叉树,最大深度、判断两棵树是否相等、另一棵树的子树
    检查两棵树是否相同100.相同的树-力扣(LeetCode)思路解透两个根节点一个为空一个不为空的话,这两棵树就一定不一样了若两个跟节点都为空,则这两棵树一样当两个节点都不为空时:若两个根节点的值不相同,则这两棵树不一样若两个跟节点的值相同,则对左右两棵子树进行递归......
  • Python学习手册(第四版)】学习笔记09.3-Python对象类型-分类、引用VS拷贝VS深拷贝、比较
    个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。这部分稍杂,视需要选择目录读取。主要讲的是对之前的所有对象类型作复习,以通俗易懂、由浅入深的方式进行介绍,所有对象类型共有的特性(例如,共享引用),引用、拷贝、深拷贝,以及比较、......
  • 力扣3226 使两个整数相等的位更改次数
    写的代码:classSolution{public:stringcc(intnum){stringres="";while(num>0){intr=num%2;res=static_cast<char>(48+r)+res;num/=2;}returnres;}int......
  • 题解:P10765 「CROI · R2」在相思树下 I
    在发布求救信号后,@我就在这里253发了题解。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongintt,ans;voidsolve(){ intn,k,x,ans; scanf("%lld%lld",&n,&k); ans=1; intpre=1,behind=n; for(inti=0;i<k;i++......
  • 判断字符串相等
    “==”操作符用于比较两个对象的地址是否相等。.equals()方法用于比较两个对象的内容是否相等。Strings1=newString("hh");Strings2=newString("hh");//trueSystem.out.println(s1.equals(s2));//falseSystem.out.println(s1==s2);Object类的equals()/......