{"id":562,"date":"2012-08-06T21:05:37","date_gmt":"2012-08-07T01:05:37","guid":{"rendered":"http:\/\/www.joshho.com\/blog\/?p=562"},"modified":"2017-08-01T14:02:28","modified_gmt":"2017-08-01T18:02:28","slug":"project-euler-problem-41","status":"publish","type":"post","link":"https:\/\/www.joshho.com\/blog\/2012\/08\/06\/project-euler-problem-41\/","title":{"rendered":"Project Euler &#8211; Problem 41"},"content":{"rendered":"<p>Problem 41: We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime.<\/p>\n<p>What is the largest n-digit pandigital prime that exists?<br \/>\n<!--more--><br \/>\n<code><\/p>\n<pre lang='java'>\r\n\r\nclass runner\r\n{\r\n\tprivate static boolean isPrime(int n){\r\n\t\tfor(int i=2; i<Math.sqrt(n); i++){\r\n\t\t\tif( n % i == 0){\r\n\t\t\t\t\/\/System.out.println(i+ \" \" + n);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\t\r\n\t\/\/Concept from Steinhaus\u2013Johnson\u2013Trotter\r\n\tpublic static String[] permute(String obj, String[] arr2){\r\n\t\tif(arr2.length == 0) return new String[]{obj};\r\n\t\t\r\n\t\tString[] arr = new String[(arr2[0].length()+1) * arr2.length];\r\n\t\tint count = 0;\r\n\t\tfor(String str: arr2){\r\n\t\t\tfor(int i=0;i<str.length();i++){\r\n\t\t\t\tString pre = (i==0) ? \"\" : str.substring(0,i);\r\n\t\t\t\tarr[count++]=pre+obj+str.substring(i);\r\n\t\t\t}\r\n\t\t\tarr[count++]=str.substring(0,str.length())+obj;\r\n\t\t}\r\n\t\t                    \r\n\t\treturn arr;\r\n\t}\r\n\t\r\n\tpublic static void main (String[] args) throws java.lang.Exception\r\n\t{\r\n\t\tlong time = System.currentTimeMillis();\r\n\r\n\t\tint limit = 10;\r\n\t\tint largest = -1;\r\n\t\tString[] arr = {};\r\n\t\tfor(int i=1;i<limit;i++){\r\n\t\t\tarr = permute(String.valueOf(i),arr);\r\n\t\t\t\r\n\t\t\tfor(String str : arr){\r\n\t\t\t\tint current = Integer.valueOf(str);\r\n\t\t\t\tif(isPrime(current)){\r\n\t\t\t\t\tSystem.out.println(str);\r\n\t\t\t\t\tif(largest < current)\r\n\t\t\t\t\t\tlargest = current;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tSystem.out.println(\"L:\"+largest);\r\n\t\t\r\n\t\tSystem.out.println(\"time: \"+(System.currentTimeMillis() - time));\r\n\t}\r\n}\r\n<\/pre>\n<p><\/code><br \/>\nNote1: <\/p>\n<pre>\r\n\tlimit = 9 -> 404ms; \r\n\tlimit = 7 -> 43ms;\r\n<\/pre>\n<p>The limit is 7 as [1+..+8] is divisible by 3, as is [1+..+9]<br \/>\nNote2: The prime check could probably be optimized.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem 41: We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime.<\/p>\n<p>What is the largest n-digit pandigital prime that exists?<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[56],"tags":[],"_links":{"self":[{"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/posts\/562"}],"collection":[{"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/comments?post=562"}],"version-history":[{"count":0,"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/posts\/562\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/media?parent=562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/categories?post=562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/tags?post=562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}