- 博客(15)
- 收藏
- 关注
原创 关于二维情况下另类切蛋糕问题的思路
参考源:3Blue1Brown:【官方中配】分圆问题,诡异的数列规律:解答篇这个情况下,我们不再考虑切几刀,而是圆周上有n个点,每一刀的刀痕都必须通过圆周上这n个点中的两个点的情况。求最大分割数。 这个问题有一个非常有趣又诡异的答案 当只有1个点的时候,最多只能有111个区域 当有2个点的时候,最多可以分成222个区域 当有3个点的时候,最多可以分成444个区域 当有4个点的时候,最...
2018-02-22 11:05:03
732
原创 关于立体图形切n刀最多切多少块的结论及推导
思路主要参照了知乎这个话题下德安城和安堇然的回答。自己再写一遍主要是为了加深理解。首先直接给出结论: 在d维空间内,对于被切中的d维立体,每一刀将造成d-1维的划痕,将该d维立体分成两部分,则切n刀后得到的块数最多为: f(d,n)=Σdk=0Cknf(d,n)=\Sigma_{k=0}^{d}C_n^k 其中,d表示维数,可以从0开始取,n表示切的刀数。为了推导过程表述方便,我们要先给出一个
2018-02-08 19:26:11
9351
1
原创 Project Euler 52题 Permuted multiples
题目来源ProjectEuler题意非常简单,找出一个数x,使得x,2x,3x,4x,5x,6x包含的数字相同但是顺序不同。其实如果想到了17=0.142857⋯" role="presentation">17=0.142857⋯17=0.142857⋯\frac 17=0.142857\cdots,就会想到142857可能是答案,但是不敢确定是最小的,还是写代码验证一下。
2018-01-29 11:42:10
430
1
原创 Project Euler 第51题 Prime digit replacements
题目来源ProjectEuler这个题先定义并解释了 x prime value family,指的是一个素数,通过将若干个数字相同的位替换为其他数字,得到的最多10个数中,仍然为素数的这些数组成的集合,比如13,将1替换成其他数字,得到23,33,43,53,63,73,83,93,加上13总共9个数,其中有13,23,43,53,73,83这六个数是素数,这就构成了一个6 prime va
2018-01-29 11:08:58
596
原创 Project Euler 46-50题
第46题 题目来源ProjectEuler这个题求满足如下条件的最小的数x: 1.是奇数 2.是合数 3.不能表示为x=p+2∗y2x=p+2*y^2,其中p为质数,y为正整数。 先筛出一个范围内的质数,比如1~100w,然后求其中的合数是否满足以上条件。 复杂度O(nn√)O(n\sqrt n)#include<bits/stdc++.h>using namespace std
2017-09-29 18:15:51
671
原创 Project Euler 41-45题
第41题 题目来源ProjectEuler 该题求由1-n的数字的全排列构成的数中,最大的素数。 显然n小于等于九。而若n=9,则∑9i=1i=45\sum_{i=1}^9i=45,是9的倍数,所以n≤8n \leq 8。 我们利用prev_permutation()函数,求一个全排列的上一个全排列,而运行len!len!次后将会回到初始排列。我们枚举全排列的长度,由长至短依次检验,一旦成功
2017-09-27 20:18:57
835
原创 Project Euler 36-40题
第36题 题目来源ProjectEuler这一题求的是小于1,000,000的所有数中,在十进制和二进制表示下都是回文数的数的和。 枚举每个数,检验即可,复杂度O(nlogn)O(n\log n) 另一种方法,可枚举前一半的位上的数字,然后将整个数加上去,由于这样产生的所有数都是结果的一部分,省去了许多冗余的运算,会更快一些。但是代码复杂度更高一些。 我使用的是第一种方法:#include<
2017-09-26 20:41:24
609
原创 Project Euler 31-35题
第31题 题目来源ProjectEuler这一题求200可以由1,2,5,10,20,50,100,200以多少种不同的方式相加而成。 将硬币分别标记为f[1]=1;f[2]=2;f[3]=5;f[4]=10;f[5]=20;f[6]=50;f[7]=100];f[8]=200; 使用dp[i][j]dp[i][j]表示利用最大面额为f[j]的纸币组成i有多少种方法。 转移就是dp[i][j
2017-09-20 13:02:36
1226
原创 Project Euler 26-30题
第26题 题目来源ProjectEuler这一题是求1i,∀i∈[2,1000)\frac1i,\forall i \in [2,1000)的所有结果的十进制小数表示下具有最长循环节的ii。 我将在我的算法中定义有限小数也是循环节为1的循环小数,例如0.25=0.25(0)0.25=0.25(0) 回忆列竖式的过程,不太会用mathtype,没对齐,不过应当容易看懂。 在竖式的最后一行,
2017-09-18 16:33:05
900
原创 Project Euler 21-25题
第21题 题目来源ProjectEuler这个题定义了一个函数d(x)=∑divisorid(x)=\sum divisor_i,其中divisoridivisor_i是xx的因子且!=x!=x 求小于10,000的所有满足d(d(a))==ad(d(a))==a的aa的和。 首先求所有数不为本身的因子的和。如果一个数一个数去分解,复杂度将会是O(nn√)O(n\sqrt n)的。但是有一个O
2017-09-14 20:23:59
812
1
原创 Project Euler 16-20题
第16题 题目来源ProjectEuler这个题是求210002^{1000}在十进制表示下各位数字的和。 我没想到很好的算法,只想到一个O(n2)O(n^2)的高精度处理,直接求出结果,再一位一位加起来。int main(){ int num[1000],len=0; num[0]=1; for (int i=1;i<=1000;i++){ int tm
2017-09-13 17:18:46
690
原创 Project Euler 11-15题
话说刚刚才注意到Project Euler的提交时间记录的是UTC 第11题 题目来源ProjectEuler这一题与第8题类似,不过这个求的是八个方向上的最值。虽然这个也可以有类似移动窗口的做法,但是考虑到长度只有四,O(n∗len∗direction)O(n*len*direction)的复杂度也不高,而移动窗口的代码复杂度会高很多。所以选择了裸暴力的做法。 (期间因为cal函数没有ret
2017-09-12 17:16:14
600
原创 Project Euler 6-10题
为什么感觉6-10题比1-5题暴力了好多,没什么好的可改进点-_-!!! 第6题 题目来源ProjectEuler这个题求(∑ni=1i)2−(∑ni=1i2)(\sum_{i=1}^ni)^2-(\sum_{i=1}^ni^2),是O(1)O(1)的。int main(){ long long ans=0,n=100; ans=n*(n+1)/2; ans*=ans;
2017-09-12 13:42:40
595
2
原创 Project Euler 1-5题
第1题 题目来源ProjectEuler这个题求的是严格小于1000的数中,是3或5的倍数的数的和。(刚开始理解错below的意思了,把1000算进去了,尴尬)int main(){ int ans=0; for (int i=1;i<1000;i++){ if (i%3==0||i%5==0){ ans+=i; }
2017-09-10 21:25:29
1439
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅