LoginSignup
0

More than 3 years have passed since last update.

posted at

updated at

合成数列の和アドベントカレンダー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

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0