どう書く?orgのお題正整数のゲーデル数化?への投稿用に書きました。
既に投稿されているSiroKuroさんのコードのc – ‘0’ってところに萌えつつ、こういうときにIEnumeratorを使うと効率がいいのね~と勉強になりつつ、こんな感じで書いてみました。
分かりやすく書いたつもりがかえって意図が伝わりにくくなってる気がします。
参考としてリンクされいるWikiを見ても、ゲーデル数というものがが何なのかさっぱり理解出来ませんが、お題に示されているように書いてみました。
//http://ja.doukaku.org/100/ 投稿用 using System; using System.Collections.Generic; class Program { static void Main(string[] args) { Console.WriteLine(goedel(9)); Console.WriteLine(goedel(81)); Console.WriteLine(goedel(230)); Console.ReadLine(); } static double goedel(int n) { string tmpStr = n.ToString(); double r = 1; List<double> prime = new List<double>(new double[] { 2 }); for(int i = 3; ; i += 2) { bool isPrime = true; for(int j = 3; j < i; j++) { if(i % j == 0) { isPrime = false; break; } } if(isPrime) prime.Add(i); if(prime.Count >= tmpStr.Length) break; } for(int i = 0; i < tmpStr.Length; i++) { r *= Math.Pow(prime[i], (double.Parse(tmpStr[i].ToString()))); } return r; } }