Project Euler
文章平均质量分 66
sdj222555
这个作者很懒,什么都没留下…
展开
-
Project Euler problem 69
考察欧拉函数的一道题首先要知道 【定理】正整数n(n≥2)可以唯一分解成素数乘积,即:n =p[1]^r1 * p[2] ^r2 * p[3]^r3. *...* p[s]^rs其次欧拉函数有两个性质,可以用来编程,单独求phi函数:① phi(m) = m ( 1- 1/p[1]) ( 1- 1/p[2])…( 1- 1/p[s])② phi(p^k)原创 2014-10-27 22:00:56 · 1007 阅读 · 0 评论 -
Project Euler problem 53
就是一个组合数而已硬求就行。#include #include #include #include #include #include #include #include #include #include #define eps 1e-6#define INF 1000000007#define PI acos(-1.0)using namespace原创 2012-11-06 21:42:55 · 479 阅读 · 0 评论 -
Project Euler problem 51
这题的话。。还是有点细节问题需要注意的我刚开始猜测这个数可能是6位数所以我就从10W开始枚举素数然后,首先,个位数是不能被换的。 因为一换之后肯定不到8个素数了,光偶数都好几个了然后说了可以不相邻的数来回换。那么你就枚举呗。注意的是,你要是能换出来一个比我们枚举的那个素数要小的素数的话。 注意。。换出来小的数是可以的,但是比他小的素数是不可以的。所以。。原创 2012-11-06 21:13:50 · 741 阅读 · 0 评论 -
Porject Euler problem 56
。。还是javaimport java.math.*;import java.util.*;public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int ans = 0; for(in原创 2012-11-07 08:53:38 · 595 阅读 · 0 评论 -
Porject Euler problem 55
懒得写高精度。直接用java模拟了一下好了import java.math.BigInteger;import java.util.*;public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub原创 2012-11-07 08:43:27 · 545 阅读 · 0 评论 -
Project Euler problem 48 处理乘法取模爆long long的方法
呵呵 这题的猥琐之处在于你用快速幂中间过程都有可能爆了long long 不过我有处理爆long long 的方法乘的时候用二分的方法去搞就没问题了。详见代码#include #include #include #include #include #include #include #include #include #define eps 1e-6#de原创 2012-11-06 14:14:28 · 1784 阅读 · 0 评论 -
Project Euler problem 47
还是暴力我先试着把15W个数进行素因子分解然后4个的存起来然后搜一下发现还真的在15W以内#include #include #include #include #include #include #include #include #include #define eps 1e-6#define INF 1000000007#define原创 2012-11-06 14:04:42 · 724 阅读 · 0 评论 -
Project Euler problem 46
直接暴力。。暂时不会别的做法原创 2012-11-06 14:03:34 · 459 阅读 · 0 评论 -
Project Euler problem 45
观察一下就发现。 只要满足第3个序列 ,一定会有第一个序列所以搜第3个序列,看满足第二个序列不。对于第n项的第3个序列。值为m = (2 * n - 1) * n然后就要找一个第二序列的项x 使得 x * (3 *x - 1) = 2 * m可以发现x 的下界和上界分为sqrt(2* m / 3)和sqrt(2 * m/ 3) + 1 然后看能不能搞就行了原创 2012-11-06 13:37:01 · 666 阅读 · 0 评论 -
Project Euler problem 44
哎。。。直接往上枚举就行了。不过我还是加了点小的优化。。但是很纯暴力相比感觉没优化多少。。都是O(n ^ 2)的#include #include #include #include #include #include #include #define eps 1e-6#define INF 1000000007#define PI acos(-1.0原创 2012-11-06 12:56:59 · 965 阅读 · 0 评论 -
Project Euler problem 43
这题的话直接next_permutation搞也行10!也就300多W或者像这样,DFS着来搞 效率会快很多#include #include #include #include #include #include #include #include #include #include #include #define MAXN 1111原创 2012-11-05 21:09:18 · 506 阅读 · 0 评论 -
Project Euler problem 42
模拟题而已#include #include #include #include #include #include #include #include #include #include #include #define MAXN 1111111#define MAXM 400005#define INF 2000000007#define PI原创 2012-11-05 20:18:04 · 496 阅读 · 0 评论 -
Project Euler problem 41
因为9个数的和是45 ,8个数的和是36,6个数的和是21,5个数的和是15所以只用试一试7个数和4个数好了实际上就试一下所有的全排列 ,然后凑成数,检查一下是不是素数7!才5000多#include #include #include #include #include #include #include #include #include #include原创 2012-11-05 20:10:34 · 477 阅读 · 0 评论 -
Project Euler problem 40
这题的话直接模拟也行或者用一种跟数的位数相关的方法我们注意到1位数有9个2位数90个3位数900个4位数9000个依次类推然后就可以知道我们要查的第几位在几位数中出现#include #include #include #include #include #include #include #include #include原创 2012-11-05 19:53:19 · 447 阅读 · 0 评论 -
Project Euler problem 39
如果把problem 9的那篇论文看了之后算法也就出来了#include #include #include #include #include #include #include #include #include #include #include #define MAXN 111111#define INF 100000007using na原创 2012-11-05 17:32:47 · 538 阅读 · 0 评论 -
Project Euler problem 38
这题主要看观察能力他要找最大的。就得比题目给的那个要大给的是9开头的。所以呢。要找的肯定也是9开头的。首先看90几行不,乘1乘2乘3后发现位数不能到9位再看900多再看9000多发现9000多有可能行乘以2后是5位数然后凑一块就是个9位数然后枚举9000多就行了#include #include #include #includ原创 2012-11-05 17:07:11 · 538 阅读 · 0 评论 -
Project Euler problem 54
一道有点复杂的模拟题吧。。 也不算难写 细节上注意一下就行了。。首先就是判断rank。 这个还是好判断的。如果rank一样就要把每个人手中的牌按优先级排列一下,两人按顺序比较这个优先级,说例子吧。 假如是两个对儿的。 优先比较的肯定是大的那个对儿,然后是小的那个对儿,再然后是那个单张的再说一个 有一对儿还有三张一样的。 优先比较的是三张的,再比较一对儿的再一个例子,就有一个对原创 2012-11-06 23:13:39 · 603 阅读 · 0 评论 -
Project Euler problem 49
直接暴力搞#include #include #include #include #include #include #include #include #include #define eps 1e-6#define INF 1000000007#define PI acos(-1.0)using namespace std;bool tag[10001];原创 2012-11-06 14:43:58 · 478 阅读 · 0 评论 -
Project Euler problem 68
题意需要注意的一点就是,序列是从外层最小的那个位置顺时针来的。原创 2014-10-27 21:47:02 · 929 阅读 · 0 评论 -
Project Euler problem 60
呃。 我是硬模拟的。首先预处理出5W以内的素数至于为啥是5W, 这个值是自己设定的,太小了肯定出不了结果,太大就比较慢。然后预处理每个素数和比他大的素数,看能不能共存。 每个素数都有一个vector, 里面存的是比他大的能共存的素数然后就枚举就行了。。#include #include #include #include #include #i原创 2013-09-29 12:31:41 · 1408 阅读 · 0 评论 -
Project Euler problem 59
这题题意是:用三个小写字母组成的密钥去加密一个文章。因为密钥比较短,所以循环着来。加密的方法是用ASCII码来异或然后这种题。。我会说我是26*26*26 然后把所有可能枚举一遍。 每种密钥解密前20个字母。输出到一个txt里 有一万多条记录, 一个一个的看。。看哪个像。最后发现密钥是 god然后这篇文章是圣经里的。给跪。其实原创 2013-09-29 11:11:48 · 1326 阅读 · 0 评论 -
Project Euler problem 67
这水题。。#include #include #include #include #include #include #define eps 1e-8using namespace std;int dp[111][111];int main(){ freopen("C:/data.txt", "r", stdin); for(int i = 1; i <原创 2013-10-01 18:27:52 · 1142 阅读 · 0 评论 -
Project Euler problem 65
。。水题。直接模拟这个过程即可arr = []arr.append(2)for i in range(1, 50): arr.append(1) arr.append(2 * i) arr.append(1)up = 1now = 99down = arr[now]for i in range(now - 1, -1, -1): ta = arr[i] * down原创 2013-10-01 12:31:50 · 1041 阅读 · 0 评论 -
Project Euler problem 66
pell方程及连分数wiki如下http://zh.wikipedia.org/wiki/%E9%80%A3%E5%88%86%E6%95%B8http://zh.wikipedia.org/zh-cn/%E4%BD%A9%E5%B0%94%E6%96%B9%E7%A8%8B主要应用的是 对于连分数 ,前四个收敛(编号 到 )是用普原创 2013-10-01 18:19:27 · 1691 阅读 · 0 评论 -
Project Euler problem 64
这题直接模拟就行了。然后就看算出来的这个式子是否以前出现过比如样例中的a5 = 1, 7/(sqrt(23) - 3)这个23是固定的所以只要看1, 7, -3这个组合以前出现过没用hash就行。当然我用的是python的dic直接传一个tupleimport mathdef gao(n): m = int(math.sqrt(n)) if m * m原创 2013-10-01 11:48:22 · 1011 阅读 · 0 评论 -
Project Euler problem 62
题目的大意很简单做法的话。我们就枚举1~10000的数的立方,然后把这个立方中的有序重新排列,生成一个字符串s, 然后对于那些符合题目要求的肯定是生成同一个字符串的。然后就可以用map来搞了这里偷懒用了pythonimport stringdic = {}def getstr(n): sn = str(n) arr = [] for c in原创 2013-09-29 23:55:16 · 1048 阅读 · 0 评论 -
Project Euler problem 61
题意很明了。然后我大概的做法就是暴搜了先把每个几边形数中四位数的处理出来。然后我就DFS回溯着找就行了。比较简单吧。#include #include #include #include #include #include using namespace std;vectorg[7], v[7][10000];int vis[7];void原创 2013-09-29 20:49:33 · 1151 阅读 · 0 评论 -
Project Euler problem 63
这题略水啊首先观察一下。10 ^ x次方肯定是x + 1位的所以底数肯定小于10的那么我们就枚举1~9为底数然后枚举幂级数就行了,直至不满足题目中的条件即可breakcnt = 0for i in range(1, 10): e = 1 while True: if len(str(i**e)) != e: break e += 1 cn原创 2013-09-30 00:08:17 · 1114 阅读 · 0 评论 -
Project Euler problem 9 勾股数
这题还有点意思找出一组勾股数a,b,c使得a + b+ c = 1000最后求a * b * c是多少最裸的想法是1000 * 1000的枚举不过,显然我们需要更优的算法。对于a + b + c = s 如果s 比较大怎么办一个基本勾股数有这样的性质 gcd(a, b, c) = 1而对所有的勾股数有gcd(a, b) = gcd(a, c原创 2012-11-02 23:58:18 · 738 阅读 · 0 评论 -
Project Euler problem 58
找规律。然后遍历就行原创 2012-11-07 09:27:06 · 625 阅读 · 0 评论 -
Project Euler problem 57
观察这个分子序列 设分子为b序列 ,分母为a 序列则他们满足一下条件a[i] = a[i - 1] * 2 + a[i - 2]b[i] = b[i - 1] * 2+b[i - 2]然后就发现需要高精度import java.math.*;import java.util.*;public class Main { /** * @param args原创 2012-11-07 09:13:56 · 509 阅读 · 0 评论 -
Project Euler problem 52
首先通过观察,可以发现,这个数必然是至少6位数的。因为他乘以6之后还是一样的位数。这就要求他最高位必然是1了。次高位不超过6.然后1倍到6倍的最高位必然都是不一样的。可以这样证明:在1倍到6倍之间。假设x为第i倍的最高位,y为第i +1倍的最高位如果x 与y相等,必然x是通过进位得到的。但是如果x能产生进位,由于y是i + 1倍得来的,所以i +1倍也必然会进位。所以y不可原创 2012-11-06 21:29:45 · 671 阅读 · 0 评论 -
Project Euler problem 50
暴力搞之首先要记录的是从第1个素数到第 i个素数的连续和这样任意连续区间的素数和就能在O(1)时间内搞出来然后就枚举就行了。#include #include #include #include #include #include #include #include #include #define eps 1e-6#define INF 100原创 2012-11-06 15:13:03 · 488 阅读 · 0 评论 -
Project Euler problem 32
直接暴力吧粗略算了一下 上限不超过1W原创 2012-11-05 14:36:43 · 441 阅读 · 0 评论 -
Project Euler problem 37
试探性的筛了个500W素数表然后一个一个素数的试了试11个都给找出来了最大的也就70多W#include #include #include #include #include #include #include #include #include #include #include #define MAXN 111111#define INF 100000原创 2012-11-05 16:17:12 · 410 阅读 · 0 评论 -
Project Euler problem 36
一百万以内的回文数不超过2千个。如果直接遍历1到100W显然有点慢枚举每一位的数字然后生成回文数就快多了然后再判断是不是二进制回文。#include #include #include #include #include #include #include #include #include #include #include #define原创 2012-11-05 15:49:27 · 445 阅读 · 0 评论 -
Project Euler problem 24
就是个康托展开的逆运算。。然后前段时间刚弄过不会的百度康托展开原创 2012-11-04 13:53:42 · 462 阅读 · 0 评论 -
Project Euler problem 18
简单DP嘛。#include #include #include #include #include #include #include #include #include #include #include #define MAXN 111111#define INF 100000007using namespace std;int a[22][22];in原创 2012-11-03 21:24:38 · 427 阅读 · 0 评论 -
Project Euler problem 14
这题有一点需要注意。中间过程可能会超过int.然后直接枚举,然后模拟就好了。然后注意可能1千万以下的数可能碰见的次数很多所以最好记忆化一下 然后就能瞬间出来了不记忆化可能就比较慢了#include #include #include #include #include #include #include #include #include #includ原创 2012-11-03 20:09:15 · 492 阅读 · 0 评论 -
Project Euler problem 13
给出了一百个50位的数求他们的和的前10个数字这题貌似要用高精度?不过,其实不需要。。。因为double 可以存10^308次方的数但是精度只能保持在十几位的样子不过这够了 ,因为我们只要前10位啊double sum = 0; for(int i = 0; i { double x; cin >> x;原创 2012-11-03 19:11:15 · 409 阅读 · 0 评论