Написать программу, которая для чисел в диапазоне от A до B определяла количество их делителей. К примеру, A= 10, B = 15.
Делители для числа 10 - 1 2 5 10
Делители для числа 11 - 1 11
Делители для числа 12 - 1 2 3 4 6 12
Делители для числа 13 - 1 13
Делители для числа 14 - 1 2 7 14
Делители для числа 15 - 1 3 5 15
Другие языки программирования и технологии
[С++] Написать программу
#include <iostream>
using namespace std;
template<typename Type>
bool is_prime(Type num) {
bool prime;
if (num <= 5 && (num <= 2 || num == 3 || num == 5)) prime = true;
else if (~num & 1 || 0 == num % 3 || 0 == num % 5) prime = false;
else {
Type n;
for (n = 3; n * n <= num && num % n; n += 2) { ; }
prime = n * n > num? true : false;
}
return prime;
}
void func(unsigned a) {
cout << a << " - 1";
if (!is_prime(a)) {
auto mid = a >> 1U;
auto lambda = [=](unsigned i) {
auto x = a / i;
if (x * i == a) cout << ' ' << i;
};
if (a & 1U) for (auto i = 3U; i <= mid; i += 2U) lambda(i);
else for (auto i = 2U; i <= mid; ++i) lambda(i);
}
cout << ' ' << a << '\n';
}
int main() {
cout << ">>> ";
unsigned a, b;
cin >> a >> b;
if (a > b) swap(a, b);
do func(a); while (++a <= b);
system("pause");
}
using namespace std;
template<typename Type>
bool is_prime(Type num) {
bool prime;
if (num <= 5 && (num <= 2 || num == 3 || num == 5)) prime = true;
else if (~num & 1 || 0 == num % 3 || 0 == num % 5) prime = false;
else {
Type n;
for (n = 3; n * n <= num && num % n; n += 2) { ; }
prime = n * n > num? true : false;
}
return prime;
}
void func(unsigned a) {
cout << a << " - 1";
if (!is_prime(a)) {
auto mid = a >> 1U;
auto lambda = [=](unsigned i) {
auto x = a / i;
if (x * i == a) cout << ' ' << i;
};
if (a & 1U) for (auto i = 3U; i <= mid; i += 2U) lambda(i);
else for (auto i = 2U; i <= mid; ++i) lambda(i);
}
cout << ' ' << a << '\n';
}
int main() {
cout << ">>> ";
unsigned a, b;
cin >> a >> b;
if (a > b) swap(a, b);
do func(a); while (++a <= b);
system("pause");
}
Антон Новиков
Надо быстрее? Пожалуйста.

У меня код получился довольно коротким:
#include "iostream"
using namespace std; int f(int n)
{ int k,kol=1; if (n==1) return 1; else { for (k=1; k <= n/2; k++) if (n%k==0) kol+=1; return kol; } }
int main() { k,A,B; for(;;) { cout << "\nA B > "; cin >> A >> B; for (k=A; k <= B; k++) cout << k << '-' << f(k) << ';'; } }
Работает отлично на небольших числах (где-то миллионов до 50, причём все числа диапазона [A..B] для определённости - только натуральные!), а вот чем ближе к одному-двум миллиардам, тем время решения задачи становится всё больше и больше! А если ещё и диапазон слишком широкий (скажем 1000000000..1000010000), то такая программа заставит зависнуть даже хорошую рабочую станцию, потому что алгоритм слишком неэффективный - это расплáта за крáткость кóда, которая отнюдь не всегда сестра таланта!..
#include "iostream"
using namespace std; int f(int n)
{ int k,kol=1; if (n==1) return 1; else { for (k=1; k <= n/2; k++) if (n%k==0) kol+=1; return kol; } }
int main() { k,A,B; for(;;) { cout << "\nA B > "; cin >> A >> B; for (k=A; k <= B; k++) cout << k << '-' << f(k) << ';'; } }
Работает отлично на небольших числах (где-то миллионов до 50, причём все числа диапазона [A..B] для определённости - только натуральные!), а вот чем ближе к одному-двум миллиардам, тем время решения задачи становится всё больше и больше! А если ещё и диапазон слишком широкий (скажем 1000000000..1000010000), то такая программа заставит зависнуть даже хорошую рабочую станцию, потому что алгоритм слишком неэффективный - это расплáта за крáткость кóда, которая отнюдь не всегда сестра таланта!..
Ни здасьте, ни пожалуйста,
Чую, не снискать тут ни денег, ни славы...
Чую, не снискать тут ни денег, ни славы...
Григорий Здравин
Здасьте, пожалуйста :)
Похожие вопросы
- Помогите написать программу со switch в СИ
- Какую написать программу?
- Нужно написать программу на паскале
- Помогите написать программу на С. Тема Составление программ с использованием массивов
- написал программу на с++ работает, но есть маленький вопрос
- Как написать программу в паскале
- Напишите программу, которая находит в массиве количество элементов, равных заданному значению X .
- Помогите на С# написать программу на поиск Синуса с косинусом.
- Как написать программу на Delphi программа которая бы постоянно висело в памяти и через определенное
- Люди помогите написать программы для Pascal очень срочно и очень нужно