Вам даны два натуральных числа А и Б. Посчитайте у скольких чисел в интервале [A;Б] сумма делителей будет нечётным.Ограничение (1<=A<=B<=1000). Не получается сделать правильную сумму, буду рад любой помощи.
#include<iostream>
using namespace std;
int main()
{
int a = 1, b = 6, sum = 0, total = 0;
for (int i = a; i <= b; ++i)
{
for (int j = 1; j< i ; ++j) {
if (i % j == 0) sum += j;//Тут проблема
if (sum % 2 != 0) ++total;
sum = 0;
}
}
cout << "Total:" << total << endl;
system("pause");
return 0;
}
Если считать 1 как делитель, само число - не считать, и работать перебором (хотя тут есть более хитрые варианты, выгодные при больших числах - например, факторизация на простые числа, подсчет произведения степеней нечетных простых в разложении и на основе этого получение четности суммы делителей. Может, есть способы и еще хитрее, не знаю...) - то я бы делал так, не считая сумму.
bool odd_d(int n)
{
bool odd = true; // 1!
for(int i = 2; i*i <= n; ++i)
{
if (n%i) continue;
if (i%2) odd = !odd;
int d = n/i;
if (d == i) continue;
if (d%2) odd = !odd;
}
return odd;
}
int main(int argc, const char * argv[])
{
int a, b, count = 0;
cin >> a >> b;
for(int n = a; n <= b; ++n)
if (odd_d(n)) ++count;
cout << count << endl;
}
Вопрос закрыт, решение найдено.Исправленный код будет выглядеть так.
#include<iostream>
using namespace std;
int main()
{
int a = 1, b = 6, sum=0, total = 0;
for (int i = a; i <= b; ++i)
{
for (int j = 1; j<= i ; ++j) {
if (i % j == 0) sum += j;
}
if (sum % 2 != 0) ++total;
sum = 0;
}
cout << "Total:" << total << endl;
system("pause");
return 0;
}
Сигма-функция (σ1 здесь) нечетна для чисел вида p^2
и p^2 * 2
(например, 16, 18, 25)
Количество таких чисел в заданном диапазоне можно посчитать несложным циклом или напрямую с использованием корня (если это не приведёт к ошибкам округления)
int odd_sigma(int n) {
return (int)sqrt(n) + (int)sqrt(n / 2);
}
int odds_in_inclusive_range(int a, int b) {
return odd_sigma(b) - odd_sigma(a-1);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здраствуйте, у меня почему то пишет, что "mainmoc" не найдено, а если убираю её, то пишет Symbol(s) not found for architecture x86_64
Я ламер в программированииРешил написать программу которая будет работать с определенной программой установленной у пользователя на ПК
У меня есть обычная функция check_t_value(int T_VALUE) и слот slot_conside()
есть строка "ACGT" как сделать размещения с повторениями, чтобы получилось что-то подобное