March 2014 update

This commit is contained in:
Ingy döt Net 2014-04-02 16:56:35 +00:00
parent 09687c4926
commit a25938f123
1846 changed files with 21876 additions and 5203 deletions

View file

@ -1,6 +1,16 @@
import std.stdio, std.algorithm, std.parallelism, std.typecons;
ulong[] decompose(ulong n) pure nothrow {
typeof(return) result;
for (ulong i = 2; n >= i * i; i++)
for (; n % i == 0; n /= i)
result ~= i;
if (n != 1)
result ~= n;
return result;
}
void main() {
import std.stdio, std.algorithm, std.parallelism, std.typecons;
immutable ulong[] data = [
2UL^^59-1, 2UL^^59-1, 2UL^^59-1, 112_272_537_195_293UL,
115_284_584_522_153, 115_280_098_190_773,
@ -8,9 +18,10 @@ void main() {
112_272_537_095_293, 1_099_726_829_285_419];
//auto factors = taskPool.amap!(n => tuple(decompose(n), n))(data);
//static enum genPair = (ulong n) pure => tuple(decompose(n), n);
static genPair(ulong n) pure { return tuple(decompose(n), n); }
auto factors = taskPool.amap!genPair(data);
auto pairs = map!(p => tuple(reduce!min(p[0]), p[1]))(factors);
writeln("N. with largest min factor: ", reduce!max(pairs)[1]);
auto pairs = factors.map!(p => tuple(p[0].reduce!min, p[1]));
writeln("N. with largest min factor: ", pairs.reduce!max[1]);
}

View file

@ -25,14 +25,16 @@ final class MinFactor: Thread {
}
private void run() {
immutable clock_t begin = clock();
immutable clock_t begin = clock;
switch (num) {
case 0: fac = []; break;
case 0: fac = [];
break;
case 1: fac = [1]; break;
case 1: fac = [1];
break;
default:
uint limit = cast(uint)(1 + sqrt(cast(double)num));
uint limit = cast(uint)(1 + double(num).sqrt);
ulong n = num;
for (ulong divi = 3; divi < limit; divi += 2) {
if (n == 1)
@ -42,14 +44,14 @@ final class MinFactor: Thread {
fac ~= divi;
n /= divi;
}
limit = cast(uint)(1 + sqrt(cast(double)n));
limit = cast(uint)(1 + double(n).sqrt);
}
}
if (n > 1)
fac ~= n;
}
minFac = reduce!min(fac);
immutable clock_t end = clock();
minFac = fac.reduce!min;
immutable clock_t end = clock;
writefln("num: %20d --> min. factor: %20d ticks(%7d -> %7d)",
num, minFac, begin, end);
}
@ -63,13 +65,13 @@ void main() {
112_272_537_095_293, 1_099_726_829_285_419];
auto tGroup = new ThreadGroup;
foreach (n; numbers)
foreach (const n; numbers)
tGroup.add(new MinFactor(n));
writeln("Minimum factors for respective numbers are:");
foreach (t; tGroup)
t.start();
tGroup.joinAll();
t.start;
tGroup.joinAll;
auto maxMin = tuple(0UL, [0UL], 0UL);
foreach (thread; tGroup) {