Tried searching around for a similar question, but was unable to solve this. Not sure how to properly convert some of the features in C++ loops. Especially the count < 20 condition in main().
Original question: https://rosettacode.org/wiki/Anti-primes
#include <iostream>
int countDivisors(int n) {
if (n < 2) return 1;
int count = 2; // 1 and n
for (int i = 2; i <= n/2; ++i) {
if (n%i == 0) ++count;
}
return count;
}
int main() {
int maxDiv = 0, count = 0;
std::cout << "The first 20 anti-primes are:" << std::endl;
for (int n = 1; count < 20; ++n) {
int d = countDivisors(n);
if (d > maxDiv) {
std::cout << n << " ";
maxDiv = d;
count++;
}
}
std::cout << std::endl;
return 0;
}
My attempted solution:
def countDivisors(n):
if (n < 2):
return 1
count = 2
for i in range(2, int(n/2)-1, 1):
print(i)
if(n%i == 0):
count = count + 1
return count
def main():
print("The first 20 anti-primes are: ")
n = 1
while count < 20:
d = countDivisors(n)
if(d > maxDiv):
print(n)
maxDiv = d
count += 1
n += 1
return 0
Required answer:
1 2 4 6 12 24 36 48 60 120 180 240 360 720 840 1260 1680 2520 5040 7560