合成数列の和アドベントカレンダーTypeScript編

これは、合成数列の和 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


参考