整除光棍(附简要证明)

2024-01-05 01:18
文章标签 证明 简要 整除 光棍

本文主要是介绍整除光棍(附简要证明),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

整除光棍

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,

输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。

提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。

输入样例:

31

输出样例:

3584229390681 15

解:

[分析]:题目已经提示s可能是个非常大的数,s估计只能用字符串来表示了。
这个时候就要想到求余(%).
1.引入第一个推论
条件:d = ab+c
d%p = ((a
b)+c)%p =( b(a%p)+c)%p
证明d%p = ((a*b)+c)%p =( b(a%p)+c)%p
(在此谢谢大佬给的思路!)
任意一个数c都能表示成 d = ab +c,(任意b)的格式(欧几里得除法)
因为:d = a
b + c
所以:d % p = (ab + c) % p
设t = b % p,所以 b = kp + t
要证明的式子变成: d%p = ((a
b)+c)%p =( a*t+c)%p

((ab)+c)%p = (a * (kp + t) + c)%p = (at + c)%p

证毕

设x1=111%37

1111%37 = (111*10+1)%37 = ((111%37)*10+1)%37
1111%37 = (x1 * 10+1)%37

设x2 = 1111%37

11111%37 = (x2 * 10 + 1)%37
递推规则出来了

2.引入第二个结论

  • 111 与 31

    111 % 31 = 18
    1111 / 31 = 3
    s = ‘3’ (s为字符串)
    num = 18

  • 1111 与 31
    1111 % 31 = 26 1111 / 31 = 35
    (111 % 31 = 18)

    18 * 10 + 1 = 181
    (此时的181%31的结果等价于1111%31的结果)
    181 % 31 = 26
    181 / 31 = 5(在递推过程中这个数是小于10的)
    证明 :在递推过程中这个数是小于10的
    用g来表示光棍数,x = 31
    即证:
    10 ∗ ( g % x ) + 1 x < 10 \frac{10 * (g\%x) + 1}{x} < 10 x10(g%x)+1<10
    10 ∗ ( g % x ) + 1 x < 10 ∗ ( x − 1 ) + 1 x = 10 ∗ x − 9 x < 10 \frac{10 * (g\%x) + 1}{x} < \frac{10 * (x - 1) + 1}{x} = \frac{10 * x -9}{x} < 10 x10(g%x)+1<x10(x1)+1=x10x9<10

    证毕

    s +=‘5’(即’3’+‘5’ s==“35”)
    一直递推下去

 Created by tiffa on 2020/3/29.
#include<iostream>
#include <cstring>
using namespace std;
int main() {int x;cin>>x;string s;int len = 1;int num = 1;while(num < x){num = num * 10 + 1;len ++;}while (num % x != 0){s += (num / x) + '0';num = num % x;num = 10*num + 1;if(num%x == 0)break;len++;}s += (num / x) + '0';len++;cout<<s<<" "<<len;return 0;
}

输出结果

在这里插入图片描述
参考资料:
参考博客

这篇关于整除光棍(附简要证明)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571185

相关文章

过滤器:活性碳过滤器技术特点简要分析

活性碳过滤器是一种罐体的机械过滤器,外壳一般为不锈钢或者玻璃钢,内部填充活性炭,用来过滤水中的游离物、微生物、部分重金属离子,并能有效降低水的色度。活性炭过滤器是一种较常用的水处理设备,作为水处理脱盐系统前处理能够吸附前级过滤中无法去除的余氯,可有效保证后级设备使用寿命,提高出水水质,防止污染,特别是防止后级反渗透膜,离子交换树脂等的游离态余氧中毒污染。同时还吸附从前级泄漏过来的小分子有机物等

ISA-88与ISA-95标准简要介绍

ISA-88与ISA-95标准简要介绍 1. ISA-88标准 ISA-88是一个在制造过程自动化中广泛使用的国际标准,它主要定义和规范了制造和加工自动化应用中的工作流程模型和术语。该标准被划分为四个主要部分(Part 1至Part 4),每一部分都涵盖了不同方面的自动化生产需求。 Part 1 (ISA-88.01): 工作流程模型和术语 Part 1是ISA-88标准的基础,它定义

一种极简的余弦定理证明方法

余弦定理的证明方法有很多种,这里介绍一种极简的证明方法。该方法是本人在工作中推导公式,无意中发现的。证明非常简单,下面简单做下记录。   如上图为任意三角形ABC,以点C为原点,建立直角坐标系(x轴方向任意,y轴与x轴垂直),x轴与CB夹角为 θ 1 \theta_1 θ1​,x轴与CA夹角为 θ 2 \theta_2 θ2​。点B的坐标为 ( a c o s θ 1 , a s i n θ

零知识证明-ZK-SNARKs基础(七)

前言 这章主要讲述ZK-SNARKs 所用到的算术电路、R1CS、QAP等 1:算术电路 算术运算电路 1>半加器:实现半加运算的逻辑电路 2>全加器:能进行被加数,加数和来自低位的进位信号相加,并根据求和结果给出该位的进位信号 说明:2进制加,低位进位 相当于 结果S为 = A+B+C(地位进位) 高位进位 = A+B+C(地位进位) 三个中 有最少2个为1 高位就有进位了 【1】 方程转算

数论 - 整除问题 --- 整数集合中找出3的最大倍数

Mean:   题目描述:给一个包含非负整数的数组(长度为n),找出由这些数字组成的最大的3的倍数,没有的话则输出impossible。 analyse: 首先想到的就是直接暴力,这是最蠢的方法,数据一大的话,必会TLE。 直接用蛮力的话,生成所有的组合,为 2^n个,对每个数字再进行比较判断,需要 O(n)的时间,因为n可能会比较大,需要每个位的比较。总的时间复杂度为O(n * 2

云WAF在安全审计和合规性证明方面起到什么作用?

云WAF在安全审计和合规性证明方面起到什么作用? 云WAF的基本功能 云WAF(Cloud Web Application Firewall)是一种部署在云端的网络安全解决方案,它能够为Web应用程序提供强有力的保护,通过检测和阻止恶意流量、攻击和漏洞,确保Web应用程序的安全性和可用性。云WAF具备访问控制、网络安全审计、漏洞检测、应用安全保护、数据安全监控和审计等功能,这些功能共同构成了一

[a, b]区间内找到一些数满足可以被一个整数c整除

/***************************************************************** 问题描述: 牛牛想在[a, b]区间内找到一些数满足可以被一个整数c整除,现在你需要帮助牛牛统计区间内一共有多少个这样的数满足条件?  输入描述: 首先输入两个整数a,b,(-5*10^8 ≤ a ≤ b ≤ 5*10^8)接着是一个正整数c(1 <=

安全多方计算 同态密文计算 零知识证明 是什么、对比、优缺点

基于计算困难性理论的安全多方计算可以进一步细分为基于混淆电路的方案或者基于秘密分享的方案。 基于混淆电路的方案将所需计算的函数表达成一个巨型的布尔电路,例如,目前表达一次 SHA-256 计算至少需要使用 13 万个布尔门。尽管学术界已经提供了大量优化方案,通用 电路转化的过程依旧很复杂。由于需要使用不经意传输技术来安全地提供电路输入,即便 在有硬件加速的条件下,这类方案的处理吞吐量和计算效率依

再次拿下品牌全球代言人,王鹤棣商业价值再度证明!

9月2日,FENTY BEAUTY品牌正式官宣王鹤棣为全球代言人,这也是该品牌创立至今官宣的中国首位全球代言人。 FENTY BEAUTY是由美国歌手Rihanna创立于2017年的高端美妆品牌,也是LV母公司LVMH集团联手RIHANNA一同孵化的品牌,因其产品具有强包容性,以及能满足消费者多元需求,获得了国际声誉和市场高度认可,品牌全球吸金力排在集团第一梯队,已连年被纳入LVMH集团

使用单个位来存放每个结点的颜色:证明与实现

使用单个位来存放每个结点的颜色:证明与实现 背景知识问题阐述BFS算法的伪代码修改后的BFS算法的伪代码证明过程C语言实现结论 在算法和图论中,染色问题是一个重要的话题,尤其是在处理诸如二分图检测、图的遍历等问题时。本文将探讨在使用广度优先搜索(BFS)算法时,为何仅使用单个位来存放每个结点的颜色即可,并通过详细证明及C语言代码实现来阐述这一点。 背景知识 在图论中,图的遍