「プロジェクトオイラー問い41~50」の編集履歴(バックアップ)一覧に戻る
#include<stdio.h> #include<stdlib.h> bool spents[10]={true,false,false,false,false,false,false,false,false,false}; int ans=0; bool isPrime(int n){ if(n<2)return false; for(int i=2;i*i<=n;i+=(i&1)+1){ if(n%i==0)return false; } return true; } bool isPandigital(int n,int keta){ for(int i=0;i<keta;i++){ if(n%10>keta)return false; n/=10; } return true; } void saiki(int n,int keta){ if(isPrime(n)&&isPandigital(n,keta)==true&&ans<n){ ans=n; } if(7<=keta)return; for(int i=1;i<=7;i++){ if(spents[i]==false){ spents[i]=true; saiki(n*10+i,keta+1); spents[i]=false; } } } int main(){ saiki(0,0); printf("%d",ans); }