数学问题
化身孤岛的鲸o
我祈祷拥有一颗透明的心灵
展开
-
牛客网编程题 小游戏 数学式子展开优化
题解:这题暴力O(n2)是会超时的,所以我们要进行优化。我们首先把元素按下标分为奇数和偶数两组,然后再把标记相同的细分为一组,因为题目要求每次走正偶数步,所以奇数组的元素是可以相互得到的,偶数组的元素是可以相互得到的。然后就是组内求和,在这一步我们可以将O(n2)优化为O(n),看个例子:我们完全可以在O(n)的时间内求出Q的和,当然这里也可以求a的和,是一样的,然后就是图中画圈的那...原创 2020-03-23 17:36:01 · 152 阅读 · 0 评论 -
水仙花数
水仙花数水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。C语言实现输出m和n之间所有的水仙花数。#include<iostream>#include<algorithm>#i原创 2020-07-14 21:18:08 · 340 阅读 · 0 评论 -
组合数公式(代码实现)
比如求 CnmC_{n}^{m}Cnm,代码如下:ll combi(int n,int m){//求组合数的函数 ll cnt = 1; for(int i = 0; i < m; i++){ cnt *= n - i; cnt /= i + 1; } return cnt;}...原创 2020-01-23 16:34:26 · 3119 阅读 · 2 评论 -
全错排问题
概念:考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n)。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题。典型例子:(1)一个人写了n封不同的信及相应的n个不同的信封,他把这n封信都装错了信封,都装错信封的装法有多少种(历史有名的“装错信封问题”);(2)将一排书重新摆放,要求每本书都不摆在...转载 2020-01-17 18:07:30 · 1167 阅读 · 0 评论 -
斐波那契数列公约数
斐波那契数列公约数题意:给出m和n,分别对应斐波那契数列的第m项和第n项,求这两项的最大公约数。注意:(1 ≤m,n ≤ 231 , GCD(m,n) ≤ 45)题解:对于gcd(m,n)比较小的来说,直接套结论即可。代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#in...原创 2020-01-11 23:00:39 · 419 阅读 · 0 评论 -
快速幂
幂运算是非常常见的一种运算,求取an,最容易想到的方法便是通过循环逐个累乘,其复杂度为O(n),这在很多时候是不够快的,所以我们需要一种算法来优化幂运算的过程。快速幂的迭代写法O(logn):先直接上板子:求a的b次方typedef long long ll;int mod=1e9+7;ll binaryPow(ll a, ll b){//快速幂 ll ans=1; while(b...原创 2020-01-09 00:27:47 · 88 阅读 · 0 评论 -
线性筛素数——埃拉托色尼筛选法
方法一:简单方法这个算法会检查给定整数x能否被2~x-1的整数整除,因此对于单一数据其复杂度为O(x),算法整体的复杂度与xi(i=1,2,3,…,n)的总和成正比。不是很高效。方法二:这个算法比第一个高效了许多。方法三:埃拉托色尼筛选法#include<iostream>#include<math.h>#define MAX 10000005...原创 2019-08-04 18:45:08 · 451 阅读 · 0 评论 -
洛谷 P1338 末日的传说 逆序对 排列
洛谷 P1338 末日的传说 逆序对 排列题解:(1)题目要求是求一个有m个逆序对的字典序最小的排列。(2)我们可以考虑把这个问题的范围缩小。在决定了最小的数“1”的位置之后,剩下的数是2,3,… ,n。我们只要关心剩下的数的相对大小关系。所以考虑完当前最小的数,算出这个数对答案的贡献,然后减掉这个贡献,就可以转而解决一个更小的子问题。(即n–>n-1)(3)我们知道一个长度为n的排...原创 2020-02-24 22:40:24 · 216 阅读 · 0 评论 -
洛谷 P1372 又是毕业季I 1~n中求k个数的最大公约数
P1372 又是毕业季I代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include<cstring>#include<vector>#include<sta...原创 2020-02-06 20:18:41 · 561 阅读 · 0 评论 -
洛谷 P1604 B进制星球 2-36进制加法 高精度
洛谷 P1604 B进制星球 2-36进制加法 高精度题解:这种题除了代码有点长,不好找错之外,思维上还是很简单的。代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include<cs...原创 2020-02-02 21:58:06 · 263 阅读 · 0 评论 -
洛谷 P1865 A % B Problem 线性筛素数+前缀和
洛谷 P1865 A % B Problem 线性筛素数+前缀和代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<string>#include<vector>#define MAX 100000...原创 2020-01-10 13:51:03 · 162 阅读 · 0 评论 -
洛谷 P1313 计算系数 dp计算多项式系数
洛谷 P1313 计算系数 dp计算多项式系数思路:f [i][j]表示xiyj的系数,(默认k=i+j),可以得到转移方程:f[i][j]=f[i-1][j]*a+f[i][j-1]*b代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>...原创 2020-01-09 20:24:02 · 269 阅读 · 0 评论 -
洛谷 P1134 阶乘问题
洛谷 P1134 阶乘问题思路:蒟蒻的我只能一直模10计算 qwq代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<string>#include<vector>#define MAX 500...原创 2020-01-09 20:09:55 · 154 阅读 · 0 评论 -
洛谷 P1017 进制转换(负进制)
洛谷 P1017 进制转换(负进制)思路:首先,不管对于什么语言来说,被除数=商*除数+余数,这是解决问题的关键例如,在c语言中:(-7)%(-3)= (-1) (-7)/(-3)= 2而(-7)(被除数)= 2 (商)*(-3)(除数) +(-1)(余数)但是因为我们是不断取余数倒序为转换结果,所以余数不能出现负数,那怎么办呢?我们只需要将商+1,余数-除数即可,因为余数(绝对值)...原创 2020-01-09 16:07:53 · 256 阅读 · 0 评论 -
洛谷 P1403 [AHOI2005]约数研究
洛谷 P1403 [AHOI2005]约数研究思路:重点在于一个公式:f(i)=n/i1 ~ n 之间所有数的因子个数,可以看成共含有2因子的数的个数+含有3因子的数的个数……+含有n因子的数的个数但在1~n中含有“2”这个因子的数有n/2个,3有n/3个,以此类推,公式就出来了代码如下:#include<iostream>#include<algorithm&g...原创 2020-01-09 15:10:41 · 94 阅读 · 0 评论 -
洛谷 P1147 连续自然数和
P1147 连续自然数和思路:设一段自然数的首项为a1,末项为a2,则这段自然数之和为:sum =(a1 + a2) * (a2 - a1 + 1) / 2 = m即(a1 + a2) * (a2 - a1 + 1) = 2m可以把2M分解成两个数之积,假设分成了两个数K1,K2,且K1<K2时,可以列一个二元一次方程组:(1)a2 - a1 + 1 = K1(2)a1...原创 2020-01-09 14:21:40 · 238 阅读 · 0 评论 -
洛谷 P1029 最大公约数和最小公倍数问题
洛谷 P1029 最大公约数和最小公倍数问题题解:我们要知道两个数的乘积与它们最大公约数和最小公倍数的乘积相等。所以我们枚举 i从 1 开始直到sqrt ( x * y ),统计满足的个数,然后再乘以2即可。代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<...原创 2020-01-09 00:48:37 · 228 阅读 · 0 评论 -
洛谷 P1088 火星人 全排列函数的使用
洛谷 P1088 火星人 全排列函数的使用思路:求一个序列之后的第m个全排列。也是第一次用next_permutaion函数 orz~代码如下:#include<iostream>#include<algorithm>#include<string>#include<stdio.h>using namespace std;int...原创 2020-01-08 23:24:21 · 200 阅读 · 0 评论 -
PAT甲级 1024 Palindromic Number 高精度+回文数
Solution:这道题的意思是给出一个不超过10的次方的数(由于这个数很大,所以我们把它当作字符串来处理),如果它是回文数,直接输出即可,需要0步变换;如果不是回文数,则要求出变换几次可以把它变成回文数(最多不超过k步),如果超过k步,到此步就停止,输出当前数和k即可;若没有超过k步,到哪步变换成回文数就输出此回文数和当前步数。变换如下:将这个数反转,加上这个反转数,得到一个新数。代码...原创 2019-05-13 16:50:02 · 287 阅读 · 0 评论 -
PAT甲级 1023 Have Fun with Numbers 高精度数的乘法
Solution:这道题的意思是给出一个长度不超过20的长整数num1,将其乘以2,得到一个新的长整数num2。在num2中,如果所有位的数的一个排列和num1相等,则输出“Yes”,否则输出“No”。其实就是num1中每种数字的个数和num2必须相等。我们用数组cnt[10]记录num1中每个数字出现的次数,然后将其乘以2,再把num2中每种数字出现的次数减掉,若最终cnt中的元素全部为0,...原创 2019-05-13 11:25:15 · 254 阅读 · 0 评论 -
PAT甲级1059 Prime Factors 质因数分解+线性筛素数
Solution:题目要求:要求对一个long int型正整数进行质因数分解。用线性筛素数的方法。代码如下://质因数分解+线性筛素数#include<iostream>#define MAX 1000010using namespace std;long n;//判断的数nbool isprime[MAX];int ans[MAX];//存储质数的个数...原创 2019-09-01 11:08:19 · 223 阅读 · 0 评论 -
PAT甲级 1096 Consecutive Factors 思维 找出连续因子的最大个数
Solution:题目大意:给出一个正整数n,求n的连续因子的最大数,并输出这些连续因子。令m = sqrt(n)+1,凡是大于m的数都不可能是n的连续因子,所以只用考虑到m即可。然后我们暴力遍历,记录first和len即可。代码如下://思维#include<iostream>#include<algorithm>#include<math.h&g...原创 2019-09-12 22:08:05 · 191 阅读 · 0 评论 -
PAT甲级1078 Hashing 哈希表
Solution:题目给定一个哈希表的长度和插入的元素,采用除留余数法作为哈希函数,使用平方探测法解决冲突,要求输出给定元素在哈希表中的插入位置。插入失败的元素的位置用‘-’表示。代码如下:#include<iostream>#include<math.h>#define MAX 100005using namespace std;bool ispr...原创 2019-09-01 17:41:58 · 206 阅读 · 0 评论 -
PAT甲级 1015 Reversible Primes 进制转化+反转+判断素数
代码如下://数的反转、判断素数、进制间的转化#include<iostream>#include<stdio.h>using namespace std;int num[100];//记录转化为radex进制数每位的数组bool isprime(int x){//判断素数 if(x==1){ return false; } for(i...原创 2019-07-15 20:46:01 · 174 阅读 · 0 评论 -
PAT甲级 1049 Counting Ones 巧妙统计1的个数
Solution:题目要求:要求很简单,给出一个数n(n<=2的30次方)。2的30次方大概是1073741824,而int最大为2147483647,所以不会超出int。求1~n之间的所有数中1出现的次数。我们可以把一个数分为left,current,right三个部分,即left=数字N在i位左侧的数字、current=数字N在第i位的数字、right=数字N在i位右侧的数字...原创 2019-08-31 20:16:32 · 221 阅读 · 0 评论 -
PAT甲级 1104 Sum of Number Segments 找规律
Solution:题目大意:给出一个序列,我们要计算所有段的和。我们只要列出所有的段,就可以找出规律。例如0.1, 0.2 , 0.3, 0.4我们有:0.10.1 0.2 0.1 0.2 0.30.1 0.2 0.3 0.4 0.2 0.2 0.3 0.2 0.3 0.4 0.3 0.3 0.4 0.4...原创 2019-09-30 20:04:32 · 162 阅读 · 0 评论 -
PAT甲级 1069 The Black Hole of Numbers 数字黑洞 数学问题
Solution:题目要求:给出一个四位数,将四位降序排列得到a,将四位升序排列得到b,用a-b得到一个新的四位数,循环上述操作直到结果为6174时停止,并输出计算过程。代码如下://模拟#include<iostream>#include<algorithm>#include<string>using namespace std;int ...原创 2019-09-01 14:45:58 · 200 阅读 · 0 评论 -
PAT乙级 1013 数素数 (20分) 查找第n个素数
思路:我们要了解第n个素数的大致范围,在这个范围内查找即可。题目中n最大是10000。第10000个素数是104729第1000000个素数是15485863代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<...原创 2020-01-09 16:59:23 · 221 阅读 · 0 评论 -
PAT乙级 1007 素数对猜想 (20分) 线性筛素数
代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#define MAX 100005typedef long long ll;using namespace std;int n,flag[MAX],ans=0;void erat...原创 2020-01-09 16:27:53 · 142 阅读 · 0 评论 -
PAT乙级 1017 A除以B (20分) 简单高精度除法
代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<string>#include<vector>#define MAX 500005typedef long long ll;using nam...原创 2020-01-09 18:06:29 · 181 阅读 · 0 评论 -
PAT乙级 1008 数组元素循环右移问题 最大公约数和最小公倍数
题解:其实一个数组开大一点也可以过的,并没有限制空间==#include<iostream>#include<algorithm>#include<string>#include<stdio.h>using namespace std;int n,m,a[300];int main(){ scanf("%d%d",&am...原创 2020-01-08 22:55:38 · 251 阅读 · 0 评论 -
PAT乙级 1003 我要通过!数学问题
题意:给出一个字符串,可能有P、A、T或其他字符,现在需要根据以下几个条件来判断是否输出“YES”条件1:如果出现P,A,T之外的字符,输出“NO”;初始状态下P和T必须各恰有一个,且P在T左边,P和T之间至少有一个A,否则输出“NO”条件2:PAT,APATA,AAPATAA,AAAPATAAA,…,xPATx都输出“YES”,这里x为空或是任意数量的A条件3:假设有一个字符串的格式...原创 2020-01-08 20:17:55 · 143 阅读 · 0 评论