PE
Owaski
我不是蒟蒻,我是魔芋。
展开
-
Project Euler 001 Multiples of 3 and 5
题意:求<1000<1000的所有3 or 53~or~5的倍数的数的和 分析:考虑两种做法,第一种我们直接枚举每个数,O(1000)O(1000)的复杂度,第二种考虑容斥,33的倍数+55的倍数-1515的倍数原创 2017-02-12 19:33:28 · 234 阅读 · 0 评论 -
Project Euler 011 Largest product in a grid
题意:给定一个20×2020\times 20的矩阵,求最大的四个连续的数的乘积,连续意思是同一行连续或同一列连续或者斜线连续。 分析:暴力枚举四个数的起点,暴力枚举方向,O(202⋅4⋅4)O(20^2 \cdot 4\cdot 4),可以用之前008008的方法做到O(202⋅4)O(20^2\cdot 4)。#include <bits/stdc++.h>#define ll long lo原创 2017-02-15 21:52:44 · 227 阅读 · 0 评论 -
Project Euler 010 Summation of primes
题意:求2×1062\times 10^6以内的质数的和。 分析:欧拉筛法即可。#include <bits/stdc++.h>#define ll long long#define pii std::pair<int,int> #define mp std::make_pair #define fi first #define se second#define SZ(x) (int)(x).si原创 2017-02-15 21:40:49 · 209 阅读 · 0 评论 -
Project Euler 009 Special Pythagorean triplet
题意:求一组勾股数(a,b,c)(a, b, c),满足a+b+c=1000a + b + c = 1000。 分析:暴力枚举a,ba, b是O(10002)O(1000^2)的。 考虑公式a=m2−n2,b=2mn,c=m2+n2(m>n)a = m^2-n^2, b = 2mn, c = m^2+n^2(m >n)已经可以生成所有的基本勾股数了,我们只需要在所有基本勾股数中找一组周长是100原创 2017-02-15 21:25:04 · 228 阅读 · 0 评论 -
Project Euler 014 Longest Collatz sequence
题意:定义一种变换,当nn是奇数的时候变成3n+13n+1,当nn是偶数的时候变成n/2n/2,有个猜想是所有数都会变回00,问1∼1061\sim10^6中变回11步数最长的那个数。 分析:目前只想到记忆化搜索,顺便加点小优化。#include <bits/stdc++.h>#define ll long long#define pii std::pair<int,int> #define mp原创 2017-02-23 23:09:56 · 333 阅读 · 0 评论 -
Project Euler 013 Large sum
题意:求1010个5050位数的和的前1010位。 分析:裸的高精度,或者double啊啥的应该也是能过的吧。#include <bits/stdc++.h>#define ll long long#define pii std::pair<int,int> #define mp std::make_pair #define fi first #define se second#define SZ原创 2017-02-23 22:52:23 · 297 阅读 · 0 评论 -
Project Euler 008 Largest product in a series
题意:求一个10001000位数中,最大的连续1313个数字的乘积。 分析:考虑暴力枚举起始位置就是O(13n)O(13n)的,考虑将串按00分成若干段,就可以O(n)O(n)了。#include <bits/stdc++.h>#define ll long long#define pii std::pair<int,int> #define mp std::make_pair #define f原创 2017-02-14 21:42:32 · 337 阅读 · 0 评论 -
Project Euler 007 10001st prime
题意: 求第1000110001个质数 分析: 考虑[1,n][1, n]内质数出现个数约为nlnn\frac{n}{\ln n},n=120000n=120000时就满足条件了,直接在这个范围内做筛法筛出质数即可。#include <bits/stdc++.h>#define ll long long#define pii std::pair<int,int> #define mp std::m原创 2017-02-14 21:27:03 · 221 阅读 · 0 评论 -
Project Euler 006 Sum square difference
题意:∑100i=1i2−(∑100i=1i)2\sum_{i = 1} ^ {100}i^2 - (\sum _ {i = 1} ^ {100}i)^2 分析:依旧考虑两种做法。 1. 暴力求出两个值。 2. 前一个等于n(n+1)(2n+1)6\frac{n(n + 1)(2n + 1)}{6},后一个等于(n(n+1)2)2\left(\frac{n(n + 1)}{2}\right)原创 2017-02-14 21:20:05 · 215 阅读 · 0 评论 -
Project Euler 005 Smallest multiple
题意:lcm(1,2,3,...,20)lcm(1,2,3,...,20) 分析:依旧考虑两种做法。 1. 直接lcm(1,lcm(2,lcm(3,...)))lcm(1, lcm(2, lcm(3, ...)))。 2. 求出每个数的质因数分解,每个质数取个最高次幂即可。#include <bits/stdc++.h>#define ll long long#define pii std:原创 2017-02-14 21:11:21 · 231 阅读 · 0 评论 -
Project Euler 004 Largest palindrome product
题意:求由两个三位数乘起来构成的数中的最大的回文数。 分析:依旧考虑两种做法。 1. 直接暴力枚举两个数在判断,O(n2logn)O(n^2\log n)。 2. 枚举回文串的前一半,再判断是否能由两个三位数乘起来,O(Σd)O(\Sigma d),dd表示枚举出来的回文串的约数个数,可以先pollard-rho把所有质因子搞出来,再dfs出所有的约数。#include <bits/stdc原创 2017-02-14 21:01:10 · 233 阅读 · 0 评论 -
Project Euler 003 Largest prime factor
题意:求600851475143600851475143的最大质因子。 分析:依旧考虑两种做法。 1. 直接暴力枚举质因子,O(n0.5)O(n^{0.5})。 2. pollard-rho,O(n0.25logn)。O(n^{0.25}\log n)。#include <bits/stdc++.h>#define ll long long#define pii std::pair<int,原创 2017-02-13 12:32:46 · 292 阅读 · 0 评论 -
Project Euler 002 Even Fibonacci numbers
题意:求≤4000000\leq 4000000的所有偶fibonaccifibonacci数的和 分析:依旧考虑两种做法。 1. 我们直接枚举每个斐波那契数,O(log4000000)O(\log 4000000)的复杂度。 2. 考虑fibfib数列的奇偶性,每三个一个循环节,那我们可以设计一个矩阵乘法或者直接拿通项求一个等比数列。#include <bits/stdc++.h>#defi原创 2017-02-12 19:53:11 · 265 阅读 · 0 评论 -
Project Euler 012 Highly divisible triangular number
题意:求第一个满足约数个数>500>500个的三角形数。 分析:考虑第nn个三角形数是n(n+1)2\frac{n(n+1)}{2},而nn和n+1n+1互质,因此有 d(n(n+1)2)=⎧⎩⎨⎪⎪⎪⎪d(n2)⋅d(n+1),n为偶数d(n)⋅d(n+12),n为偶数d\left(\frac{n(n+1)}{2}\right)= \left\{\begin{matrix} d(\frac{n原创 2017-02-15 22:06:43 · 327 阅读 · 0 评论