1부터 n까지의 숫자를 하나씩만 써서 만든 n자리 숫자를 팬디지털(pandigital)이라고 부릅니다.
2143은 4자리 팬디지털인데, 이 수는 동시에 소수이기도 합니다.
n자리 팬디지털 소수 중에서 가장 큰 수는 무엇입니까?
Clickn자리 팬디지털 소수 중에서 가장 큰 수는 무엇입니까?
가장 큰 수이므로 n=9에서부터 시작하여 큰 수부터 작은수 순으로 팬디지털을 만들어가며 가장 먼저 발견되는 소수를 찾았습니다.
여기에 모든 각 자릿 수를 더한 값이 3의 배수가 나오면 해당 수는 3의 배수이므로 판단에서 제외 할 수 있습니다. (n=9,8,6,5,3,2 제외)
<script language="Javascript" type="text/javascript"> function isPrime(n){ if(n <= 1) return false; if(n == 2) return true; else if(n%2 == 0) return false; for(var i=3; i*i<=n; i+=2) if(n%i == 0) return false; return true; } function func041(nums, num, digit, n){ if(digit == n){ if(isPrime(num)) return num; else return 0; } for(var i=n; i>0; i--){ if(nums[i]){ nums[i] = false; var r = func041(nums,num*10+i,digit+1,n); if(r != 0) return r; nums[i] = true; } } return 0; } function p041(){ var max = 0, nums = [false,true,true,true,true,true,true,true,true,true]; for(var n=9; n>0; n--){ if(parseInt((n+1)*n/2) % 3 == 0) continue; max = func041(nums, 0, 0, n); if(max != 0) break; } alert(max); } </script>
이 문제는, 풀던 당시에는 몰랐는데
답글삭제4자리수와 7자리수만 가능한거였군요 ㅋㅋ
조금만 더 계산해봤으면 알아챌만한 것이었는데 ^^;
네. 3의 배수 판단으로 꽤 많이 걸러낼 수 있는 문제였네요. ^^
삭제