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. Swift4 扩张(Extenstion), 集合(Set)

    创建: 2018/03/09 完成: 2018/03/10 更新: 2018/04/19 修改小标题  [扩张的定义与使用协议] -> [通过扩张来采用协议] 更新: 2018/09/18 标题 ...

  2. 洛谷 P1941 飞扬的小鸟【dp】

    设f[i][j]为在坐标(i,j)时的最小点击次数,转移的话从i-1向上飞或者向下掉转移,注意转移完了之后要把管子部分赋值为inf #include<iostream> #include& ...

  3. bzoj 4405: [wc2016]挑战NPC【带花树】

    把每个筐子拆成3个,分别表示放0/1/2个,然后把这三个点两两连起来,每一个可以放在筐里的球都想这三个点连边. 这样可以发现,放0个球的时候,匹配数为1,放1个球的时候,匹配数为1,放2个球的时候,匹 ...

  4. [App Store Connect帮助]八、维护您的 App(1)App 维护概述

    您在 App Store 上发行 App 后,需要执行一些任务来回复顾客反馈并在整个产品周期内维护您的 App.您可以按任何顺序执行这些任务. 监控顾客评论.销售情况和分析 您可以在 App 页面的“ ...

  5. Luogu P1396 营救【最小生成树/二分答案/最短路】 By celur925

    题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门…… 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小 ...

  6. cxf CXF搭建webService服务器

    http://observer.blog.51cto.com/4267416/1231205 手动发布: public class ServerMain { public static void ma ...

  7. jenkins软件工具部署

    Jenkins服务软件的安装部署 1.我们在linux安装部署Jenkins的时候,因为jenkins是一个java web程序,所以首先要保证linux系统上已经安装配置好java JDK环境,并安 ...

  8. [POI2008]CLO

    Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个t ...

  9. JDK集合框架--ArrayList

    ArrayList,从类名就可以看出来,这是由数组实现的List,即内部是用数组保存元素的有序集合.先看看主要的成员变量,比较简单: public class ArrayList<E> e ...

  10. kafaka

    http://www.360doc.com/content/15/0429/12/9350055_466788393.shtml 一.Kafka中的核心概念 Producer: 特指消息的生产者 Co ...