![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法----数论
sunlanchang
北京邮电大学-计算机硕士,sunlanchang@bupt.edu.cn
展开
-
LeetCode 剑指 Offer 15. 二进制中1的个数(位运算)
Description请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串原创 2020-08-03 11:46:24 · 145 阅读 · 0 评论 -
LeetCode 914. 卡牌分组(GCD)
Description给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有 X 张牌。组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回 true。示例 1:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]示例 ...原创 2020-03-27 14:04:28 · 305 阅读 · 0 评论 -
LeetCode 365. 水壶问题(数论)
Description有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空示例 1: (From the famous "Die Hard" example)输入: x ...原创 2020-03-21 21:08:32 · 240 阅读 · 0 评论 -
Leetcode 137. Single Number II(位运算)
描述给一个数组,只有一个数字重复1次,其他数字重复三次,找出重复一次数字。Solution这道题是之前那道 Single Number单独的数字 的延伸,我们可以建立一个32位的数字,来统计每一位上1出现的个数,我们知道如果某一位上为1的话,那么如果该整数出现了三次,对3去余为0,我们把每个数的对应位都加起来对3取余,最终剩下来的那个数就是单独的数字。class Solution{ ...原创 2019-02-08 21:17:06 · 273 阅读 · 0 评论 -
牛客网 素数(素数筛法、北航机试)
题目描述输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。输入描述:输入有多组数据。每组一行,输入n。输出描述:输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。示例1输入100输出11 31 41 61...原创 2019-02-22 20:53:21 · 191 阅读 · 0 评论 -
牛客网 进制转换(字符串模拟、清华机试)
题目描述将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。输入描述:多组数据,每行为一个长度不超过30位的十进制非负整数。(注意是10进制数字的个数可能有30个,而非30bits的整数)输出描述:每行输出对应的二进制数。示例1输入0138输出01111000Solution30位超出long long范围,字符串模拟模2取余法,详细见注释。#in...原创 2019-02-27 21:41:22 · 354 阅读 · 0 评论 -
牛客网 约数的个数(试除法、清华机试)
题目描述输入n个整数,依次输出每个数的约数的个数输入描述:输入的第一行为N,即数组的个数(N<=1000)接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)当N=0时输入结束。输出描述:可能有多组输入数据,对于每组输入数据,输出N行,其中每一行对应上面的一个数的约数的个数。示例1输入51 3 4 6 12输出123...原创 2019-02-28 20:58:59 · 192 阅读 · 0 评论 -
牛客网 质因数的个数(质因数个数板题、清华机试)
题目描述求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=22235,共有5个质因数。输入描述:可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。输出描述:对于每组数据,输出N的质因数的个数。输入120输出5Solution用如下试除法思路最为简单,也可以用分解质因数模板。#include <cstd...原创 2019-02-28 22:09:22 · 379 阅读 · 0 评论 -
牛客网 a+b (大数加法)
题目描述实现一个加法器,使其能够输出a+b的值。输入描述:输入包括两个数a和b,其中a和b的位数不超过1000位。输出描述:可能有多组测试数据,对于每组数据,输出a+b的值。示例1输入2 610000000000000000000 10000000000000000000000000000000输出810000000000010000000000000000000Sol...原创 2019-01-12 14:01:14 · 1742 阅读 · 1 评论 -
牛客网 n的阶乘(大数运算、清华机试)
题目描述输入一个整数n,输出n的阶乘(每组测试用例可能包含多组数据,请注意处理)输入描述:一个整数n(1<=n<=20)输出描述:n的阶乘示例1输入3输出6Description大数运算阶乘板题。#include <iostream>#include <cstdio>#include <cstring>using na...原创 2019-03-14 19:32:46 · 503 阅读 · 0 评论 -
大数运算模板
加法string add(string a,string b){ string c; int len1=a.length(); int len2=b.length(); int len=max(len1,len2); for(int i=len1;i&lt;len;i++) a="0"+a; for(int i=len2;i&lt...转载 2019-03-14 19:37:00 · 281 阅读 · 0 评论 -
Leetcode 263. 丑数 (试除法)
编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数 2, 3, 5 的正整数。示例 1:输入: 6输出: true解释: 6 = 2 × 3示例 2:输入: 8输出: true解释: 8 = 2 × 2 × 2示例 3:输入: 14输出: false解释: 14 不是丑数,因为它包含了另外一个质因数 7。说明:1 是丑数。输入不会超过 32 位有符号整数的范围:...原创 2019-08-14 13:41:57 · 96 阅读 · 0 评论 -
剑指offer 丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。Solutionclass Solution: def GetUglyNumber_Solution(self, index): if index == 0: ...原创 2019-08-24 14:39:08 · 78 阅读 · 0 评论 -
剑指offer 丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。Solutionclass Solution: def GetUglyNumber_Solution(self, index): if index == 0: ...原创 2019-09-16 16:05:05 · 84 阅读 · 0 评论 -
剑指offer 求1+2+3+...+n (短路求值)
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。Solution短路求值。参考:https://blog.csdn.net/xiaoquantouer/article/details/71023448class Solution: def Sum_Solution(self, n...原创 2019-09-20 15:59:19 · 123 阅读 · 0 评论 -
剑指offer 不用加减乘除做加法(位运算)
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。Solution首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三...原创 2019-09-21 10:27:02 · 76 阅读 · 0 评论 -
Leetcode 136. Single Number(位运算、异或运算)
描述给定一个数组,只有一个数字重复一次,其他数字重复两次,找出重复一次的数字。Solution用到异或(^)的几个性质:顺序无关:即满足交换律。同一个数异或两次等于没有异或:如4 ^ 3 ^ 4 = 3。一个数与0异或的结果为其本身:如3 ^ 0 = 3。result初始值为0,将数组中每个元素都与result作异或并更新result,最终result的值就是那个唯一只出现一次...原创 2019-02-08 20:24:42 · 245 阅读 · 0 评论 -
PAT A1059 Prime Factors(分解质因数板题)
描述给出一个int范围的整数,按照从小到大的顺序输出分解为质因数的乘法公式。Solution分解质因数板题。注意:分解int范围正整数,素数表开10,000大小就够了。n==1时,因为1不是素数需要单独判断。不要忘记处理&amp;amp;amp;gt;sqrt(n)的一个质因数。#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include &amp;amp;amp;lt;原创 2019-02-03 21:00:23 · 263 阅读 · 0 评论 -
PAT B1019 数字黑洞(简单数学)
描述定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 - 126...原创 2019-02-03 19:42:31 · 679 阅读 · 0 评论 -
开关灯问题两种解决方法
有编号1~100个灯泡,起初所有的灯都是灭的。有100个同学来按灯泡开关,如果灯是亮的,那么按过开关之后,灯会灭掉。如果灯是灭的,按过开关之后灯会亮。现在开始按开关。第1个同学,把所有的灯泡开关都按一次(按开关灯的编号: 1,2,3,……100)。 第2个同学,隔一个灯按一次(按开关灯的编号: 2,4,6,……,100)。 第3个同学,隔两个灯按一次(按开关灯的编号: 3,6,9,……,99)。原创 2017-01-11 22:16:28 · 13550 阅读 · 0 评论 -
UVA 10976 分数拆分(数论+枚举)
Discription给定一个k,构造一个等式 1/k = 1/x + 1/y ,其中x>=y。Input输入不超过100行(0 < k ≤ 10000)Output输出x y的数目和x y的值。Sample Input2 12Sample Output2 1/2 = 1/6 + 1/3 1/2 = 1/4 + 1/4 8 1/12 = 1/156 + 1/13 1/12 = 1/84原创 2017-08-13 14:48:00 · 385 阅读 · 0 评论 -
HDU 2028 Lowest Common Multiple Plus(最小公倍数)
Discription求n个数的最小公倍数。Input输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。Output为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。Sample Input2 4 6 3 2 5 7Sample Output12 70Note在gcb中中间结果会溢出,注意使用long long类型。#i原创 2017-12-08 15:48:53 · 252 阅读 · 0 评论 -
POJ 1061 青蛙的约会(数论一元线性同余)
Discription两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮原创 2017-11-21 15:22:56 · 348 阅读 · 0 评论 -
HDU 2136 最大质因数(素数筛法)
描述给出一个数n,输出n的最大质因数在素数表中的位置,规定1的最大质因数位置为0,2的最大质因数位置为1,以此类推。输入输入一个n (0 < n < 1000000). Sample Input1 2 3 4 5Sample Output0 1 2 1 3解决方法利用筛法,用prime[i]来存放i这个数字分解后最大素数的位置...原创 2018-03-22 19:40:13 · 459 阅读 · 0 评论 -
HDU 4548 美素数 (素数筛法)
description小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识。 问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数。 给定一个区间,你能计算出这个区间内有多少个美素数吗?Input第一行输入一个正整数T,表示总共有T...原创 2018-03-23 14:54:29 · 190 阅读 · 0 评论 -
HDU - 2012 素数判定 (素数筛法)
description对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=xInput输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。Output对于每个给定范围内的取值,如果表达式的值都为素数,则输出”OK”,否则请输出“Sorry”,每组输出占一行。 Sample Inpu...原创 2018-03-23 15:38:22 · 440 阅读 · 0 评论 -
2017第八届蓝桥杯C/C++ B组省赛第二题(素数筛法+枚举)
标题:等差素数列2,3,5,7,11,13,....是素数序列。类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。上边的数列公差为30,长度为6。2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。这是数论领域一项惊人的成果!有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:长度为10的等差素数列,其公差最小值是多...原创 2018-03-25 16:31:26 · 489 阅读 · 0 评论 -
HDU - 1108 最小公倍数(LCM)
Description给定两个正整数,计算这两个数的最小公倍数。Input输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数.Output对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。Sample Input10 14Sample Output70Solution板题。两数字相乘再除以最大公约数就是最小公倍数。#include &lt;ios...原创 2019-01-11 12:47:21 · 250 阅读 · 0 评论 -
OpenJudge - 3248 最大公约数(GCD)
Description给定两个正整数,求它们的最大公约数。Input有多组数据,每行为两个正整数,且不超过int可以表示的范围。Output行对应输出最大公约数。Sample Input4 88 6200 300Sample Output42100Solution最大公约数板题。#include &lt;iostream&gt;#include &lt;cstdi...原创 2019-01-11 12:42:50 · 903 阅读 · 0 评论 -
OpenJudge 2710 数制转换 (数制)
描述给一个a进制的数转换为b进制的数。输入输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =&lt; a,b &lt;= 16。输出输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,…,9,A,B,…,F)。样例输入15 Aab3 7样例输出210306...原创 2019-01-11 12:25:36 · 741 阅读 · 0 评论 -
HDU - 1877 又一版 A+B(进制转换)
Problem Description输入两个不超过整型定义的非负10进制整数A和B(&lt;=231-1),输出A+B的m (1 &lt; m &lt;10)进制数。Input输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。当m为0时输入结束。Output输出格式:每个测试用例的输出占一行,输出A+B的m进制数。Sample Input8 1300 4...原创 2019-01-11 11:41:41 · 178 阅读 · 0 评论 -
HDU - 1397 Goldbach's Conjecture(素数筛法)
Description验证欧几里得猜想,给定一个偶数n,判断有几组素数相加等于n。不能将 (p1, p2) 和(p2, p1) 算作两组。Input4&lt;=n&lt;=2154&lt;=n&lt;=2^{15}4<=n<=215,以0为结尾结束输入。Output输出m,代表有m组素数相加等于n。Sample Input610120...原创 2019-01-11 13:26:47 · 221 阅读 · 0 评论 -
UVa 11300 - Spreading the Wealth(数学)
description给出一个整数n 然后n个人的钱。n个人围着一个圆桌,每个人可以给旁边的人钱。最终的目的是所有人的钱一样多。数据保证可以实现。每有一个人给别人一块钱就是步数加一 现在要最少的步数实现。input输入一个n(n &lt; 1000001)表示有n个人,总的钱的数量用long long int类型output输出交换数量最少的次数Sample Input...原创 2018-04-07 14:57:43 · 263 阅读 · 0 评论 -
等差素数列
2,3,5,7,11,13,….是素数序列。 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。 上边的数列公差为30,长度为6。 2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果! 有这一理论为基础,请你借助手中的计算机,满怀信心地搜索: 长度为10的等差素数列,其公差最小值是多少? 注意:需要提原创 2017-04-16 19:06:41 · 2277 阅读 · 0 评论