Since you're only checking numbers that are divisible by 2 or 3, here is a simple way to speed it up a little.
Code:
#include <stdio.h>
#define MAXNUM 10000000
int main() {
int count_ab = 0;
// Process numbers divisible by 2
for (int n = 12; n <= MAXNUM; n += 2) {
int sum_div = 1, div = 2;
for ( ; div * div < n; div++) {
if (n % div == 0) {
sum_div += div + n / div;
if (sum_div > n) {
count_ab++;
break;
}
}
}
if (sum_div <= n && div * div == n && sum_div + div > n)
count_ab++;
}
// Process numbers divisible by 3 but not by 2
for (int n = 15; n <= MAXNUM; n += 6) {
// 21 is a divisor of abundunt numbers in [1, 1.0e7] with last digit 1 or 3 or 7 or 9
if (n % 10 != 5 && n % 21 != 0) continue;
int sum_div = 1, div = 3; // not divisible by even numbers
for ( ; div * div < n; div += 2) {
if (n % div == 0) {
sum_div += div + n / div;
if (sum_div > n) {
count_ab++;
break;
}
}
}
if (sum_div <= n && div * div == n && sum_div + div > n)
count_ab++;
}
printf("Abundunt = %d\n", count_ab);
return 0;
}