Factors of a Mersenne number: Difference between revisions

m
→‎{{header|C++}}: simplifications
(Add 8086 assembly)
m (→‎{{header|C++}}: simplifications)
Line 646:
<lang cpp>#include <iostream>
#include <cstdint>
#include <vector>
 
typedef uint64_t integer;
Line 652 ⟶ 651:
integer bit_count(integer n) {
integer count = 0;
whilefor (; n > 0); {count++)
n >>= 1;
++count;
}
return count;
}
Line 661 ⟶ 658:
integer mod_pow(integer p, integer n) {
integer square = 1;
for (integer bits = bit_count(p); bits > 0; square %= n) {
while (bits > 0) {square *= square;
squareif =(p square& *(1 square;<< --bits))
if ((p & (1 << --bits)) != 0)
square <<= 1;
square %= n;
}
return square;
Line 676 ⟶ 671:
if (n % 2 == 0)
return n == 2;
for (integer p = 3; p * p <= n; p += 2) {
if (n % p == 0)
return false;
}
return true;
}
 
integer find_mersenne_factor(integer p) {
for (integer k = 0, q = 1;;) {
integer q = 2 * ++k * p + 1;
if ((q % 8 if== 1 || q % 8 == 7) && (mod_pow(p, q) == 1 && is_prime(q))
for (;;) {
++k return q;
q = 2 * k * p + 1;
if (q % 8 == 1 || q % 8 == 7) {
if (mod_pow(p, q) == 1 && is_prime(q))
return q;
}
}
return 0;
Line 698 ⟶ 687:
 
int main() {
std::cout << find_mersenne_factor(929) << '\n'std::endl;
return 0;
}</lang>
Anonymous user