LoginSignup
2
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-16

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

参考

2
0
0

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
  3. You can use dark theme
What you can do with signing up
2
0