Код: Выделить всё
24 = 1, 2, 3, 4, 6, 8, 12, 24
Код: Выделить всё
24, 30, 40, 42, 54, 56, 66, 70, 78 and 88При n, сколько чисел удовлетворяют указанному выше условию ниже n.
Первый подход:
Я использовал подход с простыми множителями.
Код: Выделить всё
x = p1^k1 * p2 ^k2 * p3^k3 ...
n = (k1 + 1)(k2 + 1)(k3 + 1)...
Код: Выделить всё
int max = 1000000000;
int count = 0;
for(int i = 0; i < max; ++i)
if(check(i))count++;
private static boolean check(int num) {
int ans = 1;
int count = 0;
while (num % 2 == 0) {
num /= 2;
count++;
}
ans *= (count + 1);
if (ans > 8)
return false;
for (int i = 3; i * i 8)
return false;
}
if (num != 1)
ans *= 2;
if (ans > 8)
return false;
return ans == 8;
}
аналогичный метод просеивания, который отмечает все кратные числа, а затем проверяет, равно ли число 8 или нет.
Код: Выделить всё
static int max = 100000000;
static int[] facs = new int[max];
for (int i = 2; i < max; ++i) {
for (int j = i; j < max; j += i) {
facs[j]++;
}
}
int count = 0;
for (int i = 0; i < max; ++i)
if (facs[i] == 7)//1 is a factor of all number so check for count 7
count++;
System.out.println(count);
Как вычислить числа, у которых ровно 8 делителей больше 10^9?
Есть ли какой-нибудь трюк, который мне не хватает? Как я могу это улучшить?