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 ...
随机推荐
- 【Qt】Qt之启动外部程序【转】
简述 QProcess可以用来启动外部程序,并与它们交互. 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串. 另外,也可以 ...
- wpf窗体中复合控件焦点控制
1. 自定义控件 在UserControl标记中 <UserControl KeyboardNavigation.ControlTabNavigation="Local ...
- gulp插件
gulp是趋势 gulp完全开发指南 => 快来换掉你的Grunt吧 gulp的工作流程:文件流--文件流--文件流......因为grunt操作会创建临时文件,会有频繁的IO操作,而gulp使 ...
- 使用tortoise git管理gitolite版本库
gitolite-admin是用于管理git版本库的版本库,将其从服务器上clone下来. 使用tortoise git clone的时候需要指定私钥,私钥的格式是ppk的,需要使用putty的PUT ...
- Linux之父Linus Torvalds:讨厌C++
"Linux内核的创始人Linus Torvalds最近在一封邮件中说明了内核开发需要使用C语言而非C++的理由.在庞大的项目中,人们对不是自己开发的模块并不了解,能快速理解其他模块中函数的 ...
- cadence16.6 如何对齐元件
1.选中Setup-->Application Mode-->Placement Edit mode2.按"CTRL"键,选中需要对齐的所有对象.3.点击右键右,或者在 ...
- 拥抱ARM妹纸第二季 之 第一次 点亮太阳
上次做鱼缸LED灯时还有很多材料正好拿来用.穆等等哥- 俺去找材料. 材料列表 3W LED x 3 散热片 x 1 恒流IC x 1 其他零 ...
- 表达式语言之java对正则表达式的处理
正则表达式用于字符串匹配,字符串查找,字符串替换等.例如注册email格式的验证等.java中处理正则表达式相关的类主要有java.lang.String,java.util.regex.Patter ...
- 幻灯slider
<style> .focusBox { position: relative; width: 340px; height: 240px; overflow: hidden; font: 1 ...
- iOS 进阶 第十一天(0411)
0411 UItaBbar的结构 每一个数组都有一个方法,那就是下面这个,如下图所示: 如果想看系统控件是怎么构成的,那么就采用遍历其子控件的方式来做,如上一图中所示 在iOS7及其以后的系统里,控制 ...