素敵な夜ですね。
ABC60~ABC100を解く中で必要になったメソッドを纏めたクラスを作りました。
C#で競プロを始める皆さん、お使いください!!
使い方
var a = new LittleMethods();
a.hogehoge();
コード
class LittleMethods { //整数二つを受け入れ、最大公約数を出す public long GreatestCommonDivisor(long a, long b) { // https://qiita.com/Jane35416555/items/0d9d6dd088049ce64e3d long x = 0; while (1 == 1) { if (a % b == 0) { return b; } else { x = a % b; a = b; b = x; } } } //整数二つを入れ、最小公倍数を出す public long LeastCommonMultipul(long a, long b) { // https://qiita.com/Jane35416555/items/0d9d6dd088049ce64e3d long x = GreatestCommonDivisor(a, b); return a * b / x; } //整数一つを入れ、素数ならtrueを返す public bool PrimeNumberOrNot(long x) { if (x == 1) { return false; } for (long i = 2; i * i <= x; i++) { if (x % i == 0) { return false; } } return true; } //整数一つを入れ、全ての約数をListで返す public List<long> DivisorAll(long x) { List<long> y = new List<long>(); if (x == 1) { y.Add(1); return y; } for (long i = 1; i * i <= x; i++) { if (x % i == 0) { y.Add(i); if (x / i != i) { y.Add(x / i); } } } y.Sort(); return y; } //https://stackoverflow.com/questions/4124189/ //sqrtの精度に問題があると聞いたのでいざという時使えるよう調べた。decimalを入れるとルートしてdecimalで返す。 public decimal SuperSqrt(decimal x,decimal epsilon = 0.0M) { decimal cur = (decimal)Math.Sqrt((double)x), prev; do { prev = cur; if (prev == 0.0M) return 0; cur = (prev + x / prev) / 2; } while (Math.Abs(prev - cur) > epsilon); return cur; } //階乗して返す public long Multipul_Fuctrial(long x) { long a = 1; for (int i = 2; i <= x; i++) { a *= i; } return a; } //特定の数で毎回割りながら階乗する。 public long Multipul_FuctrialRemainderer(long x) { long a = 1; long b = (long)Math.Pow(10, 9) + 7 //ここは問題に寄る for (int i = 2; i <= x; i++) { a *= i; a = a % b; } return a; } //順列総当り用 戻り値:1 2 3,1 3 2,などなど各順列のリストのリスト //本番中に作ったので参考URLを紛失。申し訳ございません。 public static IEnumerable<T[]> Make_PermutationList<T>(IEnumerable<T> col) { if (col.Count() == 1) yield return new T[] { col.First() }; foreach(var x in col) { var selected = new T[] { x }; var unused = col.Except(selected); foreach (var y in Make_PermutationList(unused)) { yield return selected.Concat(y).ToArray(); } } }
現在岸原オカルト研究部では、黒魔術(C#、競プロ)を研究しています。
twitter:@kisihara_c
他の黒魔術研究↓
自分用 C#のLINQ周り全部書く - 岸原オカルト研究部
超インスタント競プロ環境構築 C# - 岸原オカルト研究部