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 几乎等边的三角形的更多相关文章

  1. Python练习题 040:Project Euler 012:有超过500个因子的三角形数

    本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...

  2. 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 ...

  3. hackerrank Project Euler #210: Obtuse Angled Triangles

    传送门 做出一个好几个星期屯下来的题目的感觉就是一个字: 爽! 上图的黄点部分就是我们需要求的点 两边的部分很好算 求圆的地方有一个优化,由于圆心是整数点,我们可以把圆分为下面几个部分,阴影部分最难算 ...

  4. Project Euler 39 Integer right triangles( 素勾股数 )

    题意:若三边长 { a , b , c } 均为整数的直角三角形周长为 p ,当 p = 120 时,恰好存在三个不同的解:{ 20 , 48 , 52 } , { 24 , 45 , 51 } , ...

  5. Python练习题 039:Project Euler 011:网格中4个数字的最大乘积

    本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 # Project Euler: Problem 10: Largest pro ...

  6. [project euler] program 4

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

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

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

  8. Project Euler 9

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

  9. 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 ...

随机推荐

  1. [大牛翻译系列]Hadoop(20)附录A.10 压缩格式LZOP编译安装配置

    附录A.10 LZOP LZOP是一种压缩解码器,在MapReduce中可以支持可分块的压缩.第5章中有一节介绍了如何应用LZOP.在这一节中,将介绍如何编译LZOP,在集群做相应配置. A.10.1 ...

  2. (转载)delphi文件流

    delphi文件流 [复制链接] 在Delphi中,所有流对象的基类为TStream类,其中定义了所有流的共同属性和方法. TStream类中定义的属性介绍如下: 1.Size: 此属性以字节返回流中 ...

  3. Windows7鼠标右键里没有新建文本文件的选项,解决办法

    1.“开始”->“运行”,输入"regedit",打开注册表编辑器 2.展开HKEY_CLASSES_ROOT,找到.txt 3.选中.txt,查看右侧窗格的“默认值”是不是 ...

  4. WPF学习01:初始XAML浅析

    本文内容: 浅析WPF应用默认创建的XAML中元素.attributes. 新建WPF工程“HelloWPF”. 初始创建的主窗体XAML代码如下: <Window x:Class=" ...

  5. Java从入门到精通——数据库篇之OJDBC版本区别

    classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异 在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle  ...

  6. SQL统计——按照各种维度

    在SQLserver中可以按照各种维度进行统计,实现与EXCLE一样强大的功能. --========================== --Blog:<奔跑的金鱼> --Desc:&l ...

  7. python之域与属性

    python, javascript中域与属性是二个不同的概念, 域就是变量, 而属性则是符合某些约束, 例如getter, setter...等的特殊"变量". python中使 ...

  8. HTTP报文格式

    请求报文 <method><SP><uri><SP><version><CRLF> <head-name><: ...

  9. 小甲鱼汇编语言006第二章 寄存器(CPU工作原理)01

    http://baidu.ku6.com/watch/09215216064281951074.html?page=videoMultiNeed

  10. ASP.NET MVC NonActionAttribute使用说明

    默认情况下,MVC 框架将 controller 类的所有公共方法都视为操作方法. 如果您的 controller 类包含公共方法,并且您不希望它成为操作方法,则必须用 NonActionAttrib ...