これは、合成数列の和 Advent Calendar 2018 の第18日目の記事です。
今回は TypeScript
編になります。
ルール
- 入力として正の整数 N を与えたら 4 から始まる 合成数 の数列の 1 番目から N 番目までの合計を出力してください
- N は最大で 100 とします
上記から、
- 4以上の偶数は合成数なので足す
- 2以外の素数は合成数ではないので足さない
ということがわかるので、これを考慮したコードを書けば良い。
実装(TypeScript)
TypeScript
// 素数判定
function isPrime(n: number): boolean {
if (n < 2) return false;
if (n === 2) return true;
if (n % 2 === 0) return false;
for (let i = 3; i*i <= n; i += 2){
if (n % i === 0) return false;
}
return true;
}
// 合成数の取得
function getCompositeNumber(indata): number {
const num = 4;
let composites = 0;
let sum = 0;
while (composites < indata) {
if (!isPrime(num)) {
composites++;
sum += num;
}
num++;
}
return sum;
}
// 入力された値を取得
const indata = process.argv[2];
// 合成数の表示
console.log(getCompositeNumber(indata));
まぁ、あの、ね…はい。ほぼほぼ JavaScript
ですよね…自分でも自覚してます…
一応これを JavaScript
に変換したものも載せておきます。
JavaScript
// 素数判定
function isPrime(n) {
if (n < 2)
return false;
if (n === 2)
return true;
if (n % 2 === 0)
return false;
for (var i = 3; i * i <= n; i += 2) {
if (n % i === 0)
return false;
}
return true;
}
// 合成数の取得
function getCompositeNumber(indata) {
var num = 4;
var composites = 0;
var sum = 0;
while (composites < indata) {
if (!isPrime(num)) {
composites++;
sum += num;
}
num++;
}
return sum;
}
// 入力された値を取得
var indata = process.argv[2];
// 合成数の表示
console.log(getCompositeNumber(indata));
(変換したものをそのまま貼っつけたので、改行とか整形されてます)
TypeScript
の実行環境を用意するのが面倒な方、サクッと試してみたい方は、無料の Playground
を使ってみると良いです。参考までに、2つリンクを載せておきます。
出力
$ node composite_number.js 2
10
$ node composite_number.js 4
27
$ node composite_number.js 10
112
$ node composite_number.js 100
7059