トップページに戻る
次のC#のサンプルへ
前のC#のサンプルへ
Problem41 素数の中で最大のn桁Pandigital数
問題
n桁Pandigitalであるとは, 1からnまでの数を各桁に1つずつ持つこととする.
例えば2143は4桁Pandigital数であり, かつ素数である.
n桁(この問題の定義では9桁以下)Pandigitalな素数の中で最大の数を答えよ.
ソース
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
int MaxAnswer = int.MinValue;
const string StrKouho = "123456789";
var Stk = new Stack<string>();
for (int I = 0; I <= StrKouho.Length - 1; I++) {
Stk.Push(StrKouho[I].ToString());
}
while (Stk.Count > 0) {
string Popped = Stk.Pop();
bool IsPandigital = true;
for (int I = 1; I <= Popped.Length; I++) {
if (Popped.Contains(I.ToString()) == false) {
IsPandigital = false;
break;
}
}
bool IsSosuu = true;
int wkParsed = int.Parse(Popped);
if (IsPandigital) {
for (int I = 2; I * I <= wkParsed; I++) {
if (wkParsed % I == 0) {
IsSosuu = false;
break;
}
}
}
if (IsPandigital && IsSosuu) {
if (MaxAnswer < wkParsed) {
Console.WriteLine(Popped);
MaxAnswer = wkParsed;
}
}
for (int I = 0; I <= StrKouho.Length - 1; I++) {
if (Popped.Contains(StrKouho[I].ToString()) == false) {
string WillPush = Popped + StrKouho[I].ToString();
Stk.Push(WillPush);
}
}
}
}
}
実行結果
7652413
解説
深さ優先探索で、枝切りしながら、組み合わせを列挙してます。