Pretty long compared to the Python version by Florian Rohrer.
It uses Sieve of Eratosthenes to generate prime numbers up to 1000.
Then just compares if all permutations of each prime number are in the prime set.
The main method that does the job is GetPermutablePrimes.
usingSystem.Collections.Generic;usingSystem.Linq;usingXunit;namespaceDemo.LearnByDoing.Tests.RandomStuff{/// <summary>/// https://dev.to/peter/write-a-script-to-find-permutable-prime-numbers-1gg0/// </summary>publicclassPermutablePrimesTest{privateconstintUPTO=1000;[Fact]publicvoidTestSieveOf(){varexpected=new[]{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997};varactual=GetPrimeNumbers(UPTO).ToList();Assert.True(expected.SequenceEqual(actual));}[Fact]publicvoidTestPermutablePrimes(){varexpected=new[]{2,3,5,7,11,13,17,31,37,71,73,79,97,113,131,199,311,337,373,733,919,991};varactual=GetPermutablePrimes(UPTO).ToList();Assert.True(expected.SequenceEqual(actual));}privateIEnumerable<int>GetPermutablePrimes(intupto){// For O(1) lookupvarprimes=newHashSet<int>(GetPrimeNumbers(upto));foreach(varprimeinprimes){List<int>perms=GetPermutations(prime.ToString()).ToList();if(perms.All(perm=>primes.Contains(perm)))yieldreturnprime;}}privateIEnumerable<int>GetPermutations(stringinput){returnFillPermutations(input).Select(int.Parse);}privateIEnumerable<string>FillPermutations(stringinput){if(input.Length==1)yieldreturninput;elseif(input.Length==2){yieldreturninput;yieldreturnnewstring(new[]{input[1],input[0]});}else{for(inti=0;i<input.Length;i++){stringprefix=input[i].ToString();stringleft=input.Substring(0,i);stringright=input.Substring(i+1);stringnewInput=left+right;foreach(varrestinFillPermutations(newInput)){yieldreturnprefix+rest;}}}}privateIEnumerable<int>GetPrimeNumbers(intupto){// Initialize all numbers as true to "upto + 1" since array is 0-based.varprimes=Enumerable.Repeat(true,upto+1).ToArray();for(inti=2;i*i<=upto;i++){// It's already processed.if(!primes[i])continue;for(intj=i*2;j<=upto;j+=i){primes[j]=false;}}// Skip 0 & 1// Return indexes, which are prime numbersconstintskipBy=2;returnprimes.Skip(skipBy).Select((_,i)=>new{IsPrime=_,Value=i+skipBy}).Where(obj=>obj.IsPrime).Select(obj=>obj.Value);}}}
We're a place where coders share, stay up-to-date and grow their careers.
Pretty long compared to the Python version by Florian Rohrer.
It uses
Sieve of Eratosthenes
to generate prime numbers up to 1000.Then just compares if all permutations of each prime number are in the prime set.
The main method that does the job is
GetPermutablePrimes
.