static void Main(string[] args) { PrimeCalculator calc = new PrimeCalculator(); calc.GetAllPrimes(10000); for (int n = 1000; n < 10000; n++) { int d1 = n % 10; int d2 = (n / 10) % 10; int d3 = (n / 100) % 10; int d4 = n / 1000; var permutations = Permutator.Permutate(new int[] {d1, d2, d3, d4}.ToList()); var numbers = new List<int>(); foreach (var perm in permutations) { var num = perm[0] + perm[1] * 10 + perm[2] * 100 + perm[3] * 1000; if (calc.IsPrime((ulong)num) && !numbers.Contains(num) && num>999 && num>=n) numbers.Add(num); } numbers.Sort(); for (int i = 1; i < numbers.Count-1; i++) { for (int j = i+1; j < numbers.Count; j++) { if (numbers[j]-numbers[i]==numbers[i]-numbers[0]) Console.Write("{0}{1}{2}\n", numbers[0], numbers[i], numbers[j]); } } } }
public string Run() { var pe = new PrimeEnumerator(); string result = ""; var pc = new PrimeCalculator(); var query = from p in pe.SkipWhile(p => p < 1000).TakeWhile(p => p < 10000) let digits = DigitHelper.SplitDigits(p).ToList() let permutations = new Permutations <int>(digits) let backToDigits = from perm in permutations let digit = (int)DigitHelper.ConvertToNumber(perm) where digit != p && PrimeCalculator.IsPrime(digit) //pc.IsPrimeCached(digit) // select digit select new { p, Permutations = backToDigits }; var permutationsGreaterThanP = from pair in query let perms = from perm in pair.Permutations where perm > pair.p select perm where perms.Any() select new { pair.p, perms }; var outputs = from pair in permutationsGreaterThanP from perm in pair.perms let k = perm + perm - pair.p where pair.perms.Contains(k) select String.Join("", pair.p, perm, k); return(outputs.ElementAt(_count)); }
static void Main(string[] args) { ulong MAX = (ulong)1e14; ulong result = 0; PrimeCalculator calc = new PrimeCalculator(); calc.GetAllPrimes_Atkin((ulong)Math.Sqrt(MAX)); Stack<ulong> candidates = new Stack<ulong>(); for (ulong i = 1; i < 10; i++) { candidates.Push(i); } while (candidates.Count > 0) { var num = candidates.Pop(); var sumDigits = SumDigits(num); if (num % sumDigits > 0) continue; bool isStrong = calc.IsPrime(num / sumDigits); if (isStrong) { for (ulong i = 0; i < 10; i++) { var tmp = AddDigit(num, i); if (tmp>MAX) break; if (calc.IsPrime(tmp)) result += tmp; } } for (ulong i = 0; i < 10; i++) { var tmp = AddDigit(num, i); if (tmp > MAX) break; candidates.Push(tmp); } } Console.WriteLine(result); }
public IEnumerator <int> GetEnumerator() { int x = 1; while (true) { x++; if (PrimeCalculator.IsPrime(x)) { yield return(x); } } }
public static bool Check(List<ulong> primes, PrimeCalculator calculator) { int len = primes.Count; ulong len2 = checked((ulong)Math.Pow(2, len)); for (ulong i = 0; i < len2; i++) { ulong mul1 = 1; ulong mul2 = 1; ulong tmp = i; for (int j = 0; j <= len/2; j++) { if (tmp % 2 == 0) mul1 *= primes[j]; else mul2 *= primes[j]; tmp /= 2; } if (!calculator.IsPrime(mul1+mul2)) return false; } return true; }
public void IsNotPrimeTest() { int notPrime = 9; Assert.IsFalse(PrimeCalculator.IsPrime(notPrime)); }
public void IsPrimeTestOne() { int prime = 2; Assert.IsTrue(PrimeCalculator.IsPrime(prime)); }