{"id":537,"date":"2012-08-05T01:12:05","date_gmt":"2012-08-05T05:12:05","guid":{"rendered":"http:\/\/www.joshho.com\/blog\/?p=537"},"modified":"2012-09-07T16:12:27","modified_gmt":"2012-09-07T20:12:27","slug":"project-euler-problem-35","status":"publish","type":"post","link":"https:\/\/www.joshho.com\/blog\/2012\/08\/05\/project-euler-problem-35\/","title":{"rendered":"Project Euler &#8211; Problem 35"},"content":{"rendered":"<p>Problem 35: How many circular primes are there below one million?<br \/>\n<!--more--><br \/>\n<code><\/p>\n<pre lang='java'>\r\nimport java.util.Vector;\r\n \r\nclass runner\r\n{\r\n\tprivate static boolean isPrime(int n){\r\n\t\t\/\/if(primes.contains(n)) return true; Unnecessary for the code written.\r\n\t\tdouble sqrt = Math.sqrt(n);\r\n\t\tfor(int i=0;i<primes.size();i++){\r\n\t\t\tif(primes.get(i) > sqrt) break;\r\n\t\t\tif(n % primes.get(i) == 0) return false;\r\n\t\t}\r\n\t\tprimes.add(n);\r\n\t\treturn true;\r\n\t}\r\n \r\n\tprivate static boolean isCyclicalPrime(int n){ \r\n\t\tdouble len = Math.floor( Math.log10( n != 0 ? n : 1 ) ) + 1;\r\n \r\n\t\t\/\/197 -> 971 -> 719\r\n\t\tfor(int i=1;i<len;i++){\r\n\t\t\tint mod = n%10, cyc = n\/10;\r\n\t\t\tcyc += mod*Math.pow(10,len-1);\r\n\t\t\tif(!primes.contains(cyc)) return false;\r\n\t\t\tn=cyc;\r\n\t\t}\r\n \r\n\t\treturn true;\r\n\t}\r\n \r\n\tstatic Vector<Integer> primes = new Vector<Integer>();\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\tfor(int i=2;i<1000000;i++){\r\n\t\t\tisPrime(i);\r\n\t\t}\r\n\t\tSystem.out.println(\"time: \"+(System.currentTimeMillis() - time));\r\n\t\t\r\n\t\tint count = 0;\r\n\t\tfor(int i=0;i<primes.size();i++){\r\n\t\t\tif(isCyclicalPrime(primes.get(i))){\r\n\t\t\t\tcount++;\r\n\t\t\t\t\/\/System.out.println(primes.get(i));\r\n\t\t\t}\r\n\t\t}\r\n\t\tSystem.out.println(count);\r\n\t\tSystem.out.println(\"time: \"+(System.currentTimeMillis() - time));\r\n\t}\r\n}\r\n<\/pre>\n<p><\/code><br \/>\nNote: isCyclicalPrime takes a little over 62sec on my machine.. not good.<br \/>\nEdit: Issue was the fact I was using a Vector..., the following takes 99ms<\/p>\n<p><code><\/p>\n<pre lang='java'>\r\n \r\nclass runner\r\n{\r\n\tprivate static void primeSieve(boolean[] primes){\r\n\t\tfor(int i=2;i<primes.length;i++){\r\n\t\t\tfor(int j=2;i<primes.length;j++){\r\n\t\t\t\tint prod = i*j;\r\n\t\t\t\tif(prod >= primes.length) break;\r\n\t\t\t\tprimes[prod] = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n \r\n\tprivate static boolean isCyclicalPrime(int n, boolean[] primes){ \r\n\t\tdouble len = Math.floor( Math.log10( n != 0 ? n : 1 ) ) + 1;\r\n \r\n\t\t\/\/197 -> 971 -> 719\r\n\t\tfor(int i=1;i<len;i++){\r\n\t\t\tint mod = n%10, cyc = n\/10;\r\n\t\t\tcyc += mod*Math.pow(10,len-1);\r\n\t\t\tif(!primes[cyc]) return false;\r\n\t\t\tn=cyc;\r\n\t\t}\r\n \r\n\t\treturn true;\r\n\t}\r\n \r\n\tpublic static void main (String[] args) throws java.lang.Exception\r\n\t{\r\n\t\tlong time = System.currentTimeMillis();\r\n\t\t\r\n\t\tint limit = 1000000;\r\n\t\tboolean[] primes = new boolean[limit+1];\r\n\t\tfor(int i=2;i<primes.length;i++) primes[i] = true;\r\n\t\tprimeSieve(primes);\r\n\t\t\r\n\t\tSystem.out.println(\"time: \"+(System.currentTimeMillis() - time));\r\n\t\t\r\n\t\tint count = 0;\r\n\t\tfor(int i=2;i<primes.length;i++){\r\n\t\t\tif(primes[i] &#038;&#038; isCyclicalPrime(i, primes)){\r\n\t\t\t\tcount++;\r\n\t\t\t\t\/\/System.out.println(primes.get(i));\r\n\t\t\t}\r\n\t\t}\r\n\t\tSystem.out.println(count);\r\n\t\tSystem.out.println(\"time: \"+(System.currentTimeMillis() - time));\r\n\t}\r\n}\r\n<\/pre>\n<p><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem 35: How many circular primes are there below one million?<\/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\/537"}],"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=537"}],"version-history":[{"count":0,"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/posts\/537\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/media?parent=537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/categories?post=537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joshho.com\/blog\/wp-json\/wp\/v2\/tags?post=537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}