Project Euler 94:Almost equilateral triangles 几乎等边的三角形
Almost equilateral triangles
It is easily proved that no equilateral triangle exists with integral length sides and integral area. However, the almost equilateral triangle 5-5-6 has an area of 12 square units.
We shall define an almost equilateral triangle to be a triangle for which two sides are equal and the third differs by no more than one unit.
Find the sum of the perimeters of all almost equilateral triangles with integral side lengths and area and whose perimeters do not exceed one billion (1,000,000,000).
几乎等边的三角形
可以证明,不存在边长为整数的等边三角形其面积也是整数。但是,存在几乎等边的三角形 5-5-6,其面积恰好为12。
我们定义几乎等边的三角形是有两条边一样长,且第三边与这两边最多相差1的三角形。
对于周长不超过10亿的三角形中,找出边长和面积都为整数的近似等边三角形的周长和。
解题
这个直接暴力是可以的
先说:几乎等边三角形有两种,边长可以是:a、a、a+1 和a、a、a-1都满足三角形任意两边之和大于第三边,两边之差小于第三边。
下面就是这么根据三边怎么计算面积,并判断面积是整数
我第一想到的是海伦公式

当边长是:a、a、a+1的时候

判断根号下面的平方数,再判断结果S能够被4整除
当边长是:a、a、a-1的时候

这个和上面也一样了。
这个一个变量时间比较长,表示很伤不起
JAVA
package Level3;
public class PE094{
public static void run(){
long MAX = 1000000000;
long L1 = 0;
long L2 = 0;
for(long a =2;;a++){
if(3*a+1>MAX || 3*a-1>MAX){
break;
}
if(a>=2){
if(areaIsInteger(a,a+1) == true)
L1 +=3*a + 1;
}
if(a>=3){
if(areaIsInteger(a,a-1) == true)
L2 +=3*a - 1;
}
}
System.out.println("L1: "+L1);
System.out.println("L2: "+L2);
System.out.println(L1 + L2);
}
// L1: 109552588
// L2: 408855758
// 518408346
// running time=124s662ms
public static boolean areaIsInteger(long a ,long c){
// c = a + 1
if( c == a+1){
long s1 = (3*a + 1)*(a-1);
if((long)Math.sqrt(s1) * (long)Math.sqrt(s1) !=s1)
return false;
long s2 = (long) ((a+1)*Math.sqrt(s1));
if(s2%4 != 0)
return false;
else{
return true;
}
}
if( c== a-1){
long s1 = (3*a -1)*(a+1);
if((long)Math.sqrt(s1)*(long)Math.sqrt(s1) !=s1)
return false;
long s2 = (long)((a-1)*Math.sqrt(s1));
if(s2%4 != 0)
return false;
else{
return true;
}
}
return true;
}
public static void main(String[] args) {
long t0 = System.currentTimeMillis();
run();
long t1 = System.currentTimeMillis();
long t = t1 - t0;
System.out.println("running time="+t/1000+"s"+t%1000+"ms");
}
}
上面根据海伦公式判断面积是否是整数,比较复杂。
直接根据三角形底乘高除以2比较简单点。
公式:
判断面积是否是整数的程序如下
public static boolean areaIsInteger2(long a,long c){
if(c*c%4!=0)
return false;
long s0 = a*a-c*c/4;
long sqrt = (long)(Math.sqrt(s0));
if(sqrt * sqrt != s0)
return false;
long s = c*sqrt;
if(s%2!=0)
return false;
return true;
}
这个比较简单了,运行时间还是比较快的
// L1: 109552588
// L2: 408855758
// 518408346
// running time=48s879ms
Project Euler 94:Almost equilateral triangles 几乎等边的三角形的更多相关文章
- Python练习题 040:Project Euler 012:有超过500个因子的三角形数
本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...
- Project Euler 91:Right triangles with integer coordinates 格点直角三角形
Right triangles with integer coordinates The points P (x1, y1) and Q (x2, y2) are plotted at integer ...
- hackerrank Project Euler #210: Obtuse Angled Triangles
传送门 做出一个好几个星期屯下来的题目的感觉就是一个字: 爽! 上图的黄点部分就是我们需要求的点 两边的部分很好算 求圆的地方有一个优化,由于圆心是整数点,我们可以把圆分为下面几个部分,阴影部分最难算 ...
- Project Euler 39 Integer right triangles( 素勾股数 )
题意:若三边长 { a , b , c } 均为整数的直角三角形周长为 p ,当 p = 120 时,恰好存在三个不同的解:{ 20 , 48 , 52 } , { 24 , 45 , 51 } , ...
- Python练习题 039:Project Euler 011:网格中4个数字的最大乘积
本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 # Project Euler: Problem 10: Largest pro ...
- [project euler] program 4
上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...
- Python练习题 029:Project Euler 001:3和5的倍数
开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...
- Project Euler 9
题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...
- 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 ...
随机推荐
- Spring-Mybatis 异常记录(1)
Spring applicationconfig.xml如下 <?xml version="1.0" encoding="UTF-8"?> < ...
- DOS环境下含包并引用第三方jar的java程序的编译及运行
DOS环境下含包并引用第三方jar的java程序的编译及运行 1.程序目录机构 bin:class文件生成目录 lib:第三方jar包目录 src:源程序文件目录 2.程序代码: 3.程序编译 jav ...
- silverlight 用户浏览器未安装SL插件问题
1.在Silverlight启动页面 <%@ Page Language="C#" AutoEventWireup="true" %> <!D ...
- 每日一“酷”之difflib
介绍:difflib 比较序列.该模块包含一些用来计算和处理序列直接差异的工具.她对于比较文本尤其用,其中包含的函数可以使用多种常用差异格式生成报告. 测试数据(splitlines()按行划分为序列 ...
- (转) java 复制文件,不使用输出流复制,高效率,文件通道的方式复制文件
public static void fileChannelCopy(File s, File t) { FileInputStream fi = null; FileOutputStream fo ...
- 如何成为一个牛掰的Java大神?
一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133http://if ...
- JPA学习---第二节:JPA开发环境和思想介绍
一.下载相关 jar http://hibernate.org/orm/ 下载 hibernate ,解压 http://www.slf4j.org/download.html 下载 slf4j,解压 ...
- 20145120 《Java程序设计》第4周学习总结
20145120 <Java程序设计>第4周学习总结 教材学习内容总结 -定义子类,加"extends+父类名"以继承父类. -子类只能继承一个父类 -编辑器会检查等号 ...
- Careercup - Google面试题 - 5732809947742208
2014-05-03 22:10 题目链接 原题: Given a dictionary, and a list of letters ( or consider as a string), find ...
- Netsharp快速入门(之12) 销售管理(开发发货单工作区)
作者:秋时 杨昶 时间:2014-02-15 转载须说明出处 4.4 发货单 4.4.1 部件工作区设置 1.设置部件工作区,需要设置的部件如下 2.设置单据和明细列表的字段,设置完成 ...