Consecutive primes with ascending or descending differences: Difference between revisions
Consecutive primes with ascending or descending differences (view source)
Revision as of 20:16, 4 April 2021
, 3 years ago→{{header|C#|CSharp}}: whitespace
m (Added Wren) |
m (→{{header|C#|CSharp}}: whitespace) |
||
Line 116:
=={{header|C#|CSharp}}==
Extended the limit up to see what would happen.
<lang csharp>using System.Linq
using System.Collections.Generic;
using TG = System.Tuple<int, int>;
using static System.Console;
class Program
{
const int mil = (int)1e6; foreach (var amt in new int[] { 1, 2, 6, 12, 18 }) {▼
static void Main(string[] args)
int lmt = mil * amt, lg = 0, ng, d, ld = 0; var desc = new string[] { "A", "", "De" };▼
{
int[] mx = new int[] { 0, 0, 0 }, bi = new int[] { 0, 0, 0 }, c = new int[] { 2, 2, 2 };▼
const int mil = (int)1e6;
WriteLine("For primes up to {0:n0}:", lmt); var pr = PG.Primes(lmt).ToArray();▼
for (int i = 0; i < pr.Length; i++) { ng = pr[i].Item2; d = ng.CompareTo(lg) + 1; if (ld == d) c[2 - d]++;▼
{
else { if (c[d] > mx[d]) { mx[d] = c[d]; bi[d] = i - mx[d] - 1; } c[d] = 2; } ld = d; lg = ng; }▼
desc[r], mx[r] + 1, pr[bi[r]++].Item1); foreach (var itm in pr.Skip(bi[r]).Take(mx[r]))▼
int[] mx = new int[] {
c = new int[] { 2, 2, 2 };
var pr = PG.Primes(lmt).ToArray();
for (int i = 0; i < pr.Length; i++)
{
▲
if (ld == d)
c[2 - d]++;
else
{
c[d] = 2;
}
ld = d; lg = ng;
}
{
Write("{0}scending, found run of {1} consecutive primes:\n {2} ",
desc[r], mx[r] + 1, pr[bi[r]++].Item1);
Write("({0}) {1} ", itm.Item2, itm.Item1); WriteLine(r == 0 ? "" : "\n");
}
}
}
}
class PG
class PG { public static IEnumerable<TG> Primes(int lim) {▼
{
bool[] flags = new bool[lim + 1]; int j = 3, lj = 2;▼
{
int j = 3, lj = 2;
for (int d = 8, sq = 9; sq <= lim; j += 2, sq += d += 8)
if (!flags[j])
{
▲ for (int k = sq, i = j << 1; k <= lim; k += i) flags[k] = true; }
lj = j;
for (int k = sq, i = j << 1; k <= lim; k += i) flags[k] = true;
}
for (; j <= lim; j += 2)
if (!flags[j])
{
yield return new TG(j, j - lj);
lj = j;
}
}
}</lang>
{{out}}
<pre>For primes up to 1,000,000:
|