素因数分解した結果をLINQを使用して素数ごとにグループ化する ★BigInteger版

プログラミング言語C#の学習記録(おぼえがき)

 

素因数分解した結果をLINQを使用して素数ごとにグループ化して表示するプログラム。

BigIntegerを使用するのでコンパイル時にNumerics.dllを参照する必要がある。

csc /reference:System.Numerics.dll ファイル名

(しかしすぐ忘れてしまうのです。そして同じ過ちを繰り返す・・・)

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;

namespace MyFactoring
{

    static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            var list = new List<BigInteger>();
     BigInteger num, i;

            Console.WriteLine("Enter BigInteger number");
            num = BigInteger.Parse(Console.ReadLine());
     Console.WriteLine("num = {0}", num);

     for ( i=2; i<= num; i++ ){
         while ( num % i == 0 ){
                    list.Add(i);
      num /= i;
  }
     }

            var grps = list.GroupBy(a=>a);
            foreach( var c in grps )
            {
                Console.WriteLine("{0}  {1}", c.First(),  c.Count());
            }
        }
    }
}

※なんとなくインデントが変、しかし修正するのは面倒だ。