Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
andrey_sax
0 / 0 / 0
Регистрация: 13.02.2018
Сообщений: 2
1

Закон Ома

13.02.2018, 18:47. Просмотров 394. Ответов 5
Метки нет (Все метки)

Задача: Найти количество способов (как параллельно, так и последовательно) соединить два резистора(R1, R2) с целым положительным сопротивлением так, чтобы сопротивление схемы равнялось целому числу R.

Ограничение по времени: 1 секунда

Входные данные: число http://www.cyberforum.ru/cgi-bin/latex.cgi?1 \leq  R \leq  10^9

Выходные данные: Искомое число способов.

Например: для 6 - ответ: 8. Пояснение: последовательно можно соединить резисторы с сопротивл. 1 и 5, 2 и 4, 3 и 3; параллельно: 7 и 42, 8 и 24, 9 и 18, 10 и 15, 12 и 12. Всего 8.

Очевидно, что кол-во способов последовательного соед. это R/2. Осталось эффективно посчитать кол-во для параллельного соединения, у меня есть алгоритм работающий за http://www.cyberforum.ru/cgi-bin/latex.cgi?O(R), но в 1 секунду не укладываюсь. Помогите найти эффективное решение.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2018, 18:47
Ответы с готовыми решениями:

задачи по темам: постоянный ток, закон Ома,несколько ЭДС в одной цепи, закон Джоуля-ленца
ПОМОГИТЕ, ПОЖАЛУЙСТА, РЕШИТЬ ЗАДАЧИ ПО ФИЗИКЕ!!! Тема: Постоянный ток. Сопротивление проводника. ...

закон Ома.
Составить программу, контролирующую знание закона Ома. Обучающий вводит формулу закона Ома в...

Закон Ома
Вобщем программа должны вычислять ток, напряжение, сопротивление по формуле: . Эти величины...

Закон ома
Чему равна разность потенциалов между клеммами в схеме? Что покажет амперметр если его подключить к...

закон Ома.
Обмотка реостата сопротивлением 85 Ом выполненная из никелевого провода,площа поперечного сечения...

5
Ромаха
342 / 132 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
Завершенные тесты: 1
13.02.2018, 21:23 2
Спорим, что человек, прочитавший тему и не знающий закон ома, забьет и не пойдет гуглить (а если потратит 30 секунд на поиск ничего путного не найдет (и снова забьет))
Так что уважайте чужое время - коли осознаете как получается 7 и 42 и прочие - объясните логику. Сразу (мне) она не ясна. А разбираться в тонкостях богомерзкой (для меня) физики - ой как не хоцца
0
andrey_sax
0 / 0 / 0
Регистрация: 13.02.2018
Сообщений: 2
13.02.2018, 21:39  [ТС] 3
Знаю. Глупо поступил. "Закон ома" это название олимпиадной задачи и отношения к самой сути задания вообще не имеет (вопрос к составителю задачи). Но лучше найти название для темы я не придумал(

Последовательное соединение : R = R1 + R2
Параллельное соединение: 1/R = 1/R1 + 1/R2

Теперь, надеюсь ,все ясно.
0
Shamil1
Модератор
2448 / 1660 / 368
Регистрация: 26.03.2015
Сообщений: 6,078
14.02.2018, 01:34 4
Количество параллельных соединений зависит только от количества простых множителей и их степеней. Но общую формулу с ходу вывести не удалось. Поэтому предлагаю два варианта.

1.
Выписываем все простые сомножители.
Например, для 18 = 2, 3, 3
Из них всеми возможными способами выбираем две группы.
Для 18: 2,3,3 и -; 2,3 и 3; 3,3 и 2; 2,3 и -; 3,3 и -; 2 и -; 3 и -; - и -; Всего 8 уникальных вариантов. Это и есть ответ.
(Можно уникальность проверять делением произведения большей группы на меньшую, считая пустую группу за 1. Результат деления равен R1/R2)

2.
Выписываем все простые сомножители. Откладываем в сторону те, которые встречаются 1 раз. Остальные заменяем на самые маленькие простые числа (чтобы их произведение было как можно меньше). Перемножаем и вычисляем ответ для получившегося числа (проверяя все варианты от R+1 до 2R). Это a0. ai+1 = 3ai - 1. Вычисляем an, где n - это количество отложенных множителей. Это и есть ответ.
(То есть, для получения a0 считаем степени всех множителей, сортируем по убыванию, возводим 2 в первую, 3 во вторую, 5 в третью и так далее)
Например, для 99 = 3*3*11: считаем для числа 4, получаем 3. 3*3-1 = 8.
Для числа 248430 = 7*7*13*13*2*3*5: считаем для числа 2*2*3*3, получаем 13. 13*3-1=38. 38*3-1=113. 113*3-1=338.


з.ы. Расчёты не проверял. Мог где-нибудь ошибиться.
0
Ромаха
342 / 132 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
Завершенные тесты: 1
14.02.2018, 06:15 5
Тогда и от меня вариант
C++
1
2
3
4
5
6
7
8
9
10
11
ll f;
    cin >> f;
 
    ll p = f+1, k = 0;
    double q = f*p*1.0/(p-f);
    while(p <= q) {
        if (f*p%(p-f) == 0 && f*p/(p-f) >= p) k++;
        p++;
        q = f*p*1.0/(p-f);
    }
    cout << k << endl;
Добавлено через 55 минут
Ах да, еще есть замечательный сайтик. Если просчитать первые члены и вбить в поиск - то будет вам счастье тыц
1
Shamil1
Модератор
2448 / 1660 / 368
Регистрация: 26.03.2015
Сообщений: 6,078
14.02.2018, 11:02 6
Цитата Сообщение от Ромаха Посмотреть сообщение
х да, еще есть замечательный сайтик. Если просчитать первые члены и вбить в поиск - то будет вам счастье тыц
По ссылке есть формула:
If n = (p1^a1)(p2^a2)...(pt^at), a(n) = ((2*a1 + 1)(2*a2 + 1) ... (2*at + 1) + 1)/2.
0
14.02.2018, 11:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2018, 11:02

Закон Ома
Нужно записать закон Ома для активной ветви. Вопрос в том, как правильно записать e(t)? Как E...

Закон Ома
Написать программу, которая, используя Закон Ома, вычисляет силу тока, напряжение или сопротивление...

Закон Ома
Написать программу,которая,используя закон Ома, вычисляет силу тока, напряжение или сопротивление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.