Compute the Maximum Integer Right Triangles Solutions

  • 时间:2020-09-10 12:45:51
  • 分类:网络文摘
  • 阅读:135 次

If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120.

{20,48,52}, {24,45,51}, {30,40,50}

For which value of p ≤ 1000, is the number of solutions maximised?

Maximum Integer Right Triangles Solutions

We can assume bruteforce the shorter side i from 1 to 1000. Then, we can bruteforce the the other side (of the right angle) from i to 1000 – i. The slope k can be computed via Sqrt(i*i+j*j). If three sides sum less or equal to 1000, then we increment the counter for the perimeter.

In the following Javascript, we use a dictionary (or hash map) to store the key-value pairs where key is the perimeter and the value is the number of the solutions when corresponding perimeter is chosen.

And at the end, we have to go through the dictionary to find out the key where the maximum value is stored.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
let count = {
 
};
 
for (let i = 1; i <= 1000; ++ i) {
    for (let j = i; i + j <= 1000; ++ j) {
        let k = Math.floor(Math.sqrt(j * j + i * i));
        if (k * k == i * i + j * j) {
            let p = i + j + k;
            if (p <= 1000) {
                if (typeof count[p] === 'undefined') {
                    count[p] = 1;
                } else {
                    count[p] ++;
                }
            }
        }
    }
}
 
const keys = Object.keys(count);
let cnt = 0;
let p = 0;
for (let key of keys) {
    if (count[key] > cnt) {
        cnt = count[key];
        p = key;
    }
}
 
console.log(p);
let count = {

};

for (let i = 1; i <= 1000; ++ i) {
	for (let j = i; i + j <= 1000; ++ j) {
		let k = Math.floor(Math.sqrt(j * j + i * i));
		if (k * k == i * i + j * j) {
			let p = i + j + k;
			if (p <= 1000) {
				if (typeof count[p] === 'undefined') {
					count[p] = 1;
				} else {
					count[p] ++;
				}
			}
		}
	}
}

const keys = Object.keys(count);
let cnt = 0;
let p = 0;
for (let key of keys) {
	if (count[key] > cnt) {
		cnt = count[key];
		p = key;
	}
}

console.log(p);

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
Melania Trump Given The Green Light To Continue In Libel Suit Ag  How to Be a Better Financial Blogger  [2017] Review Of Kajabi: All-In-One Online Course & Membersh  7 Tips for SEO Rankings In 2017  Court Rules That Blogger Does Not Qualify For Unemployment Benef  How A Social Media Employee Advocacy Program Can Help Your Busin  5 Ways to Work on Your Blogging Strategy No Matter Where You Are  Everything You Need to Know About Web Hosting for Your Blog  Financial Blogger Hits Rock Bottom And Finds A Way To Turn it Al  Create Credible Posts Every Time: How to Do Article Research 
评论列表
添加评论