Euler 34

答案:40730

 我用程序算了无数次都是145,蛋疼,最后拿别人的程序仔细对比……
原来 !=……
真蛋疼,我竟然连基础数学都忘了

Euler-44

根据公式容易得出:Pmin + Pj = Pk; Pj + Pk = Pmax。

遍历 Pmin 和 Pj,如果 Pmin + Pj 结果是 Pentagonal,那么 Pk = Pmin + Pj;继续算 Pk + Pj 的结果是否等于 Pentagonal 即可。

刚开始以 Pmin 为基准往后求解,算了十多分钟也没算出个结果,吃个饭静了下思路改成从 Pmax 为基准往前求解,秒出结果。

 #include <stdio.h>
#include <math.h> #define MAX_LEN 10000 int isPentagonal(int num)
{
int n = sqrt(num * 2.0 / + 1.0/);
if (*n*n - n == num * )
return n;
n++;
if (*n*n - n == num * )
return n;
return ;
} int main()
{
__int64 n, i, j, k;
__int64 Pentagonal[MAX_LEN]; for (i = ; i < MAX_LEN; i++)
{
Pentagonal[i] = (*i*i-i)/;
for (j = i-; j > ; j--)
{
n = isPentagonal(Pentagonal[i] - Pentagonal[j]);
if (n)
{
n = isPentagonal(Pentagonal[j] - Pentagonal[n]);
if (n)
{
printf("result=%d\n", Pentagonal[n]);
break;
}
}
}
if (j) break;
}
return ;
}

Euler-44

Euler-45

刚开始,直接算,算了一分钟还没出结果。。。

优化了下,秒出结果

 int main()
{
DWORD next_tri = ;
DWORD ind_tri = ;
DWORD next_pen = ;
DWORD ind_pen = ;
DWORD next_hex = ;
DWORD ind_hex = ;
while()
{
next_tri += ++ind_tri;
if (next_tri > next_pen) next_pen += (ind_pen++*)+;
if (next_tri > next_hex) next_hex += (ind_hex++ *)+; if(next_tri == next_pen && next_tri == next_hex)
{
cout<<"solution: "<<next_tri<<endl;
return ;
}
}

Euler-45

 
Euler-46
odd composite 其实是奇数&合数的意思
 #include <stdio.h>
#include <math.h> #define MAX_LEN 10000 int prime[MAX_LEN]; //0-素数, 1-非素数
int goldbach[MAX_LEN]; int main()
{
int i, j, num;
for (i = ; i < MAX_LEN; i++)
{
if (prime[i] == )
{
for (j = i + i; j< MAX_LEN; j+= i)
{
prime[j] = ;
}
}
}
goldbach[] = ;
for (i = ; i < MAX_LEN; i+= )
{
if (goldbach[i] == && prime[i] == ) //不满足i + j*j*2,且为合数
{
printf("result=%d\n", i);
}
if (prime[i] == )
{
for (j = ; j < sqrt(MAX_LEN); j ++)
{
num = i + j*j*;
if (num < MAX_LEN)
{
goldbach[num] = ;
}
}
}
}
return ;
}
 Euler-47
其实就是求每个数有多少个素数公约数
 #include <stdio.h>
#include <math.h> #define MAX_LEN 1000000
#define DISTINCT_COUNT 4 int isPrime[MAX_LEN]; //0-素数, 1-非素数
int num[MAX_LEN]; int main()
{
int i, j, k, count;
for (i = ; i < MAX_LEN; i++)
{
if (isPrime[i] == )
{
for (j = i + i; j < MAX_LEN; j+= i)
{
isPrime[j] = ;
}
for (k = i; k < MAX_LEN; k+= i)
{
num[k] ++;
}
}
} count = ;
for (i = ; i < MAX_LEN; i ++)
{
if (num[i] == DISTINCT_COUNT)
{
count ++;
if (count == DISTINCT_COUNT)
{
printf("result=%d", i - DISTINCT_COUNT + );
break;
}
}
else
{
count = ;
}
} return ;
}

Euler-50

 什么好说的,就是考阅读理解了。
求素数之和,要求连续的素数个数要是最多的,而且连续素数之和也是素数。

Euler-51

暴力解法,400秒,囧。

其实求出两个素数的相同处以后,把不同的位置上分别用0~9去算一遍应该更快,刚想到就出结果了,那也懒的再改了哈哈。

 #include <stdio.h>
#include <math.h> #define MAX_LEN 1000000
#define REPLACEMENTS_LEN 8 int isPrime[MAX_LEN]; //0-素数, 1-非素数 /**获取相同部分,相同部分用数字字符表示,不同部分用'.'表示, 注意结果是倒的*/
char *getdiff(int i, int j)
{
static char diff[] = "";
int count = ;
char diffchar = '\0';
char diffchar2 = '\0';
memset(diff, , sizeof(diff));
while (i > )
{
if (i% == j%)
{
diff[count] = i% + '';
}
else
{
if (diffchar == '\0')
{
diffchar = i % + '';
}
if (diffchar < REPLACEMENTS_LEN-+'' || diffchar != i % + '')
{
return "";
}
if (diffchar2 == '\0')
{
diffchar2 = j % + '';
}
if (diffchar2 < REPLACEMENTS_LEN-+'' || diffchar2 != j % + '')
{
return "";
}
diff[count] = '.';
}
i /= ;
j /= ;
count ++;
}
return diff;
} int check(int num, char *diff, int nth)
{
int idifflen = strlen(diff);
int count = ;
char diffchar = '.';
while (num > )
{
if (diff[count] == '\0')
{
return ;
}
if (diff[count] != '.' && diff[count] != num % + '')
{
return ;
}
if (diff[count] == '.')
{
if (diffchar == '.')
diffchar = num % + '';
if (diffchar != num % + '' || diffchar < REPLACEMENTS_LEN-nth+'')
return ;
}
count ++;
num /= ;
}
if (diff[count] == '\0')
{
return ;
}
return ;
} int main()
{
int i, j, k, count, len, maxlen = ;
char diff[];
for (i = ; i < MAX_LEN; i++)
{
if (isPrime[i] == )
{
for (j = i + i; j < MAX_LEN; j+= i)
{
isPrime[j] = ;
}
}
} /**
*1.找两个素数之间相同的部分
*2.往前找所有素数,如果有相同的部分,记录count
* 注意,如果是两位相同,这两位的数字必然是相同的数字
*/
for (i = ; i < MAX_LEN; i++)
{
if (isPrime[i] == )
{
for (j = i - ; j > ; j -- )
{
count = ;
if (isPrime[j] == )
{
strcpy(diff, getdiff(i, j));
if (diff[] != '\0')
{
count = ;
for (k = j-; k > ; k --)
{
if (isPrime[k] == )
{
count += check(k, diff, count+);
if (count == REPLACEMENTS_LEN) //先用3试试水
{
printf("%d,", k);
break;
}
}
}
}
if (count == REPLACEMENTS_LEN)
{
printf("%d,", j);
break;
}
}
}
}
if (count == REPLACEMENTS_LEN)
{
printf("%d\n", i);
break;
}
} //printf("%d", check(56663, "3..65")); return ;
}

Project Euler的更多相关文章

  1. [project euler] program 4

    上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...

  2. Python练习题 029:Project Euler 001:3和5的倍数

    开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...

  3. Project Euler 9

    题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...

  4. Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.

    In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...

  5. project euler 169

    project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...

  6. 【Project Euler 8】Largest product in a series

    题目要求是: The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × ...

  7. Project Euler 第一题效率分析

    Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...

  8. Python练习题 049:Project Euler 022:姓名分值

    本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...

  9. Python练习题 048:Project Euler 021:10000以内所有亲和数之和

    本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...

  10. Python练习题 047:Project Euler 020:阶乘结果各数字之和

    本题来自 Project Euler 第20题:https://projecteuler.net/problem=20 ''' Project Euler: Problem 20: Factorial ...

随机推荐

  1. E20170519-ts

    numeric adj. 数字的; 数值的; nibble   vt. 啃,一点一点地咬(吃); rational adj. 理性的; 合理的; n. 合理的事物; [数] 有理数; numerato ...

  2. phpStudy安装配置小记

    一.phpStudy简介 该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便.好用的PHP调试环境·该程序不 ...

  3. bzoj 1042: [HAOI2008]硬币购物【dp】

    设f[i]为凑i元的方案数,这个随便dp一下就行了 然后处理限制,我们考虑用容斥,也就是4个超限-3个超限+2个超限-1个超限,这里用状压枚举一下,然后i硬币超限就当做选了d[i]+1个,在s里减去, ...

  4. Activiti6.0教程 Service用途剖析 (二)

    这节我们学习下Activiti的7大对象,首先我们从ProcessEngine接口开始看. /* Licensed under the Apache License, Version 2.0 (the ...

  5. 【Maven】CentOS7使用Nexus3搭建maven私服

    一.简介 Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做PO ...

  6. HDU 1568 快速求斐波那契前四位

    思路: 把斐波那契通项公式转化成log的形式,高中数学... //By SiriusRen #include <bits/stdc++.h> using namespace std; ], ...

  7. bzoj2333[SCOI2011]棘手的操作 洛谷P3273 [SCOI2011]棘手的操作

    2333? 先记一下吧,这题现在全部都是照着题解做的,因为怎么改都改不出来,只好对着题解改,以后还要再做过 以后再也不用指针了!太恶心了!空指针可不止直接特判那么简单啊,竟然还要因为空指针写奇怪的分类 ...

  8. redis持久化和分布式实现

    Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势. 本文使用的redis是3.2.1版本.下载后,文件如下 将文件解压到指 ...

  9. 转 ORA-00054 的解决方法

    统有一个不用的索引,想删除这个索引, SQL> drop index GPSTIME_GLOBAL_INDEX  2  /drop index GPSTIME_GLOBAL_INDEX      ...

  10. jmeter(十五)Jmeter默认报告优化

    一.本文目的: 之前写了两篇文章搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)和ANT批量执行Jmeter脚本,功能实现上都没有什么问题,但是最后生成的报告有一点小问题,虽然不影响使 ...