Jump to content

Perfect numbers: Difference between revisions

Line 225:
=={{header|D}}==
Based on the Algol version:
<lang d>importbool std.math:isPerfectNumber(int sqrt;n) {
if (n < 2) {
 
bool perfect(int n) {
if (n < 2)
return false;
}
int max = cast(int) sqrt(cast(real) n) + 1;
int tot = 1;
 
for (int i = 2; i < max; i++) {
if (n % i == 0) {
tot += i;
int q = n / i;
if (q > i) {
tot += q;
}
}
}
 
return tot == n;
}
 
void main() {
for (int n; n < 33_550_33710000; n++) {
if (perfectisPerfectNumber(n)) {
printfwriteln("%d\n", n);
}
}
}</lang>
<lang d>unittest {
assert(equal(filter!(isPerfectNumber)(iota(1,10000)), [6,28,496,8128]));
}</lang>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.