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. Ubuntu下PHP开发配置(新增redis、sphinx、sqlserver相关配置)

    由于本人比较懒,所以一般都是用xampp的直接拿来改的…………(当然xampp中一般php版本都是比较新的用的过程中请大家注意哈,可能会和老版本冲突) 此次除了使用xampp外,还扩展了sphinx, ...

  2. CSS的IE6、IE7、FF兼容性写法

    blue;< /td> Firefox 背景变蓝色 red /9; IE8 背景变红色 *black;< /td> IE7 背景变黑色 _background:orange; ...

  3. Color About——First

    最近在Android开发学习中遇到TextView背景色以及文字颜色着色问题,在此做个记录. 首先对于颜色的选择,我推荐W3C School,上面有对网页颜色的详尽说明以及实例,还提供了对于,同一种颜 ...

  4. Highcharts条形与柱形同时显示

    var chart; $(function() { chart = new Highcharts.Chart({ chart: { renderTo: 'chart_combo' //关联页面元素di ...

  5. 《零成本实现Web自动化测试--基于Selenium》 第四章 Selenium 命令

    Selenium 命令,通常被称为Selenese,由一系列运行测试案例所需要的命令构成.按顺序排列这些命令就构成了测试脚本. 一. 验证颜面元素 1.Assertion或者Verification ...

  6. Linux nmon 监控工具使用

    Linux 系统下监控指标及指标查看 一.工具介绍     Linux 系统下资源监控使用nmon 工具.它可以帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新且并不会消耗大量的CPU ...

  7. mac安装cocoapods

    sudo gem install cocoapods

  8. LCA专题

    标签(空格分隔): LCA 我的个人网站挂了,最近就先用这个来写博客吧.以后争取在这个网站写一些与OI无关的个人爱好的东西. 题目来源:code[VS] 倍增--在线算法 用 $f[i][j]$ 记录 ...

  9. php开发过程中用什么方法来加快页面的加载速度

    1,数据库优化;2,php缓存;3,使用zend引擎(其它框架);4,分布式部署;5,静态

  10. Android journey3 @点击事件的4种写法

    对于android布局中的控件,如Button等会有相应的点击事件去响应它所需要的功能,今天我们就以电话拨号器的代码说明下几种点击事件: package com.itheima.phone; impo ...