Digital Roots Problem Description The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits,…
数根就是不断地求这个数的各位数之和,直到求到个位数为止.所以数根一定和该数模9同余,但是数根又是大于零小于10的,所以数根模9的余数就是它本身,也就是说该数模9之后余数就是数根. 证明: 假设有一个n位的10进制数,我们写成,其中表示从低到高的每一位因为 那么 也就是一个数和它的各数位之和的模9相同.不如我们把这个操作记为f即也就是所以也就是说每做一次这样的操作,它对于9的模始终是不变的所以最终求出的数根和原数对9的模相同. 例子:(12345) % 9 = (1 + 2 + 3 + 4 + 5…
原题链接 1000位大数取余: 秦九昭算法+同余与模算术: 1314 = (((1)*10+3)*10+1)*10+4 ( a + b ) % n = ( ( a % n ) + ( b % n ) ) % n ( a - b ) % n = ( ( a % n ) - ( b % n ) + n ) % n       ( ( a % n ) - ( b % n ) 可能小于 n ) a * b % n = ( a % n ) * ( b % n ) % n                 …
题意:把n个数(1-9)放到A集合和B集合里面去,使得A集合里面的数的数根为a,B集合里面的数的数根为b,也可以只放在A或B任一个集合里面.求方法总数.比如A={2,4,5},则A的数根为[2+4+5]=[11]=[2]=2 思路:一个数为a,则它的数根b=(a-1)%9+1=(digit-1)%9+1,digit是a的十进制各位上的数的和.如果存在解,那么任选一些数放到A集合里面,使得A集合的数根为a,那么B集合的数根一定为b.由公式可知,数根可以转化为余数来做,令dp[i][x]表示考虑前i…
关于digital root可以参考维基百科,这里给出基本定义和性质. 一.定义 数字根(Digital Root)就是把一个数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止.而这个一位数便是原来数字的数字根.适用范围为正整数和零.例如:65536,6+5+5+3+6=25,2+5=7,故数根为7. 二.性质 1. 任何数加减9的数字根还是它本身. 2. 9乘任何数字的数字根都是9. 3. 数字根的三则运算 (1). 两数之和的数字根等于这两个数的数字根的和数字根      …
Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5930    Accepted Submission(s): 4146 Problem Description As we know, Big Number is always troublesome. But it's really important in our…
[下载地址]http://www.colafile.com/file/1179688 图书信息:中文名: 改变未来的九大算法作者: 约翰·麦考密克译者: 管策图书分类: 软件资源格式: PDF版本: 扫描版出版社: 中信出版社书号: 9787508639017发行时间: 2013年06月封面和截图: 内容简介: Google得出的搜索结果是如何产生的?百度为何会陷入“搜索门”,又是什么机制使然?身处在大数据时代的我们,究竟该如何应对变化莫测的世界?……没有满篇的专业术语,第一次让我们通过简单明了…
题目描述 Description 数根可以通过把一个数的各个位上的数字加起来得到.如果得到的数是一位数,那么这个数就是数根.如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来.如此进行下去,直到得到是一位数为止. 比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根.再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根.  输入输出格式 Input/output 输入格式: 一个正整数(小于…
素数判定Miller_Rabin算法详解: http://blog.csdn.net/maxichu/article/details/45458569 大数因数分解Pollard_rho算法详解: http://blog.csdn.net/maxichu/article/details/45459533 然后是参考了kuangbin的模板: http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646396.html 模板如下: //快速乘 (a…
[问题描述] 数根问题递归求解:输入n个正整数(输入格式中第一行为整数个数n,后续行为n个整数),输出各个数的数根.数根的定义:对于一个正整数n,我们将它的各个位相加得到一个新的数字,如果这个数字是一位数,我们称之为n的数根,否则重复处理直到它成为一个一位数,这个一位数也算是n的数根.例如:考虑24,2+4=6,6就是24的数根.考虑39,3+9=12,1+2=3,3就是39的数根.? 要求计算一个数的数根部分利用递归函数实现. 样例输入: 5 23 424 98 632 12345 样例输出:…
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:734 解决:548 题目描述: 在 skew binary表示中, 第 k 位的值xk表示xk*(2k+1-1).  每个位上的可能数字是0 或 1,最后面一个非零位可以是2,  例如, 10120(skew) = 1*(25-1) + 0*(24-1) + 1*(23-1) + 2*(22-1) + 0*(21-1) = 31 + 0 + 7 + 6 + 0 = 44.  前十个skew数是 0.1.2.10.11.12.20.100…
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2963 解决:1066 题目描述: The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or…
1.背景 工作中遇到过需要进行极大数据的存储和运算的场景,当时使用Python解决了这个问题,在Python中,整数没有位数限制,使用起来很方便.但是当程序主体使用C/C++实现时,就比较麻烦.所以考虑实现一个大数类,用于大数的存储和运算,后面生成静态库,需要的时候直接调用. 2.算法设计 (1)存储 大数一般都是以整数队列的形式存储,取一个较大的进制S,队列中的每一个值,相当于一位.假设数组长度为N(0为低位,n-1为高位),则数组表示的值 value =  A0 + A1*S + A2*S2…
------------------------------------------------------------第七周:Follow up question 1,寻找峰值 寻找峰值 描述 笔记 数据 评测 你给出一个整数数组(size为n),其具有以下特点: 相邻位置的数字是不同的 A[0] < A[1] 并且 A[n - 2] > A[n - 1] 假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置. 注意事项 数…
--------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是简单的剖析思路以及不能bug-free的具体细节原因. ---------------------------------------------------------------- ------------------------------------------- 第九周:图和搜索. ---…
正文: 在编程中,无论是OC还是C亦或是C++语言,所声明的整数变量都会在内存中占有固定的存储空间,而这些存储空间都是固定的. 比如我们知道的int.long.short.unsigend int.unsigend long.unsigend long long等等,都有固定的存储空间,而哪怕是64位系统下的变量unsigend long long,能存储的最大范围只有. 下边复习一下基础类型的存储范围以及所占字节: 编程语言的基础类型速查表 char -128 ~ +127 (1 Byte)s…
给你一个大数n,将它分解它的质因子的乘积的形式. 首先需要了解Miller_rabin判断一个数是否是素数 大数分解最简单的思想也是试除法,这里就不再展示代码了,就是从2到sqrt(n),一个一个的试验,直到除到1或者循环完,最后判断一下是否已经除到1了即可. 但是这样的做的复杂度是相当高的.一种很妙的思路是找到一个因子(不一定是质因子),然后再一路分解下去.这就是基于Miller_rabin的大数分解法Pollard_rho大数分解. Pollard_rho算法的大致流程是 先判断当前数是否是…
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11089327.html 已经刷了很多篇leetcode题了,不过最近在找c++的实习工作(大佬们有推荐的吗QAQ),现在慢慢补上吧 虽然有点烦,但是还是要提一句,刷leetcode题目的时候,最好还是自己先思考然后写出一个通过的代码,再去看其他人的代码参考比较好,当然了,写不出来就当我没说.尽力而为即可. 一.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 c…
28-大数阶乘 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:19 submit:39 题目描述: 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入描述: 输入一个整数m(0<m<=5000) 输出描述: 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入: 复制 50 样例输出: 3041409320171337804361260816606476884437764156896051200000…
链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 DongDong是个喜欢数颜色的女孩子,她已经熟练地掌握了在序列上数颜色的操作,现在她开始学习如何在树上数颜色,现在给定一个n个点,n-1条边的树形图(视1号店为根),每个点有一个颜色,每次询问以x为根的子树中有…
字串数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2661    Accepted Submission(s): 606 Problem Description 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA". 给定若干字母和它们相应的个数,计算一共可以组…
前言 第一天的算法都还没有缓过来,直接就进入了第二天的算法学习.前一天一直在整理Binary Search的笔记,也没有提前预习一下,好在Binary Tree算是自己最熟的地方了吧(LeetCode上面Binary Tree的题刷了4遍,目前95%以上能够Bug Free)所以还能跟得上,今天听了一下,觉得学习到最多的,就是把Traverse和Divide Conquer分开来讨论,觉得开启了一片新的天地!今天写这个博客我就尽量把两种方式都写一写吧. Outline: 二叉树的遍历 前序遍历t…
前言 先说一些题外的东西吧.受到春跃大神的影响和启发,推荐了这个算法公开课给我,晚上睡觉前点开一看发现课还有两天要开始,本着要好好系统地学习一下算法,于是就爬起来拉上两个小伙伴组团报名了.今天听了第一节课,说真的很实用,特别是对于我这种算法不扎实,并且又想找工作,提高自己的情况. 那就不多说废话了,以后每周都写个总结吧,就趁着这一个月好好把算法提高一下.具体就从:课堂笔记.leetcode和lintcode相关习题.hdu和poj相关习题三个方面来写吧.希望自己能够坚持下来,给大家分享一些好的东…
题目描述 给出一个数字串,多次询问一段区间有多少个子区间对应的数为P的倍数.其中P为质数. 输入 第一行一个整数:P.第二行一个串:S.第三行一个整数:M.接下来M行,每行两个整数 fr,to,表示对S 的子串S[fr…to]的一次询问.注意:S的最左端的数字的位置序号为 1:例如S为213567,则S[1]为 2,S[1…3]为 213. N,M<=100000,P为素数 输出 输出M行,每行一个整数,第 i行是第 i个询问的答案. 样例输入 11 121121 3 1 6 1 5 1 4 样…
快速选择算法,是一种能在大致O(N)的时间内选取数组中第k大或者k小的算法.其基本思路与快速排序算法类似,也是分治的思想. 其实这个算法是个基础算法,但是不常用,所以今天编的时候错了POJ2388,才有了这篇文章. 执行Partition算法(就是那个快排里将区间内所有数划分为小的一部分和大的一部分的过程) 判断第k大的数是在小的部分还是大的部分 递归,直到区间足够小,返回结果 下面几段代码,尤其要注意的是 while(i<j) 还是 while(i<=j) 程序1:   1 2 3 4 5…
最近开始重拾算法,在 LeetCode上刷题.顺便也记录下解题报告以及优化思路. 题目链接:1.两数之和 题意 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: nums = [2, 7, 11, 15], target = 9 返回 [0, 1] 题意很简单,就是寻找两个数,这两个数相加的值等于 target.且保证每组输入一定会有…
题目连接:2.两数相加 题意 题目难度标为 中等, 因为题意上有一部分理解难度,以及需要数据结构的链表基础. 还不知道到链表的童鞋可以粗略的看下百度百科或者是翻出数据结构的书看一看,通俗一点的语言来解释链表就是:上线和下线. 上线知道自己的下线,但不知道自己下线的下线,同时也不知道自己的上线是谁. 这就是单向链表. 这道题的题意就是将两个数字变成了两个单向链表,其中每一个节点存储一位数字,且是逆序存放,也就是倒过来存了. 解题思路 首先来想一下不同情况和对应的案例: 两个链表长度相等. 输入:(…
人类发明了轮子,提高了力的使用效率. 人类发明了自动化机械,将自己从重复的工作中解脱出来. 提高效率的方法好像总是离不开两点:拒绝无效劳动,拒绝重复劳动.人类如此,计算机亦如是. 前面我们说过了四数之和的递归和递推思路,递归和递推是一个比较通用的解题方法,我们可以以此为基础对解空间有一个整体的认识,优化出更加高效的算法.下面我们以三数之和为例来看一下,如何从最简单的递归一步一步得到更加高效的解法.题目很简单,主要说一下优化的思路: 由于之前说过递归的思路,那这次我们就先用递推来解题. 由于解空间…
Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内. Output 对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行. Sample Input 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Sample Output 30 #include<iostream> #include&…
题目链接:UVa 10007 题意:统计n个节点的二叉树的个数 1个节点形成的二叉树的形状个数为:1 2个节点形成的二叉树的形状个数为:2 3个节点形成的二叉树的形状个数为:5 4个节点形成的二叉树的形状个数为:14 5个节点形成的二叉树的形状个数为:42 把n个节点对号入座有n!种情况 所以有n个节点的形成的二叉树的总数是:卡特兰数F[n]*n! 程序: import java.math.BigInteger; import java.util.Scanner; public class Ma…