С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 03.10.2015
Сообщений: 25
1

Вывести числа m,k такие, что m^2=(k^3)*n

04.12.2015, 23:10. Показов 1643. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите решить задачу

Исходные данные:
Единственная строка содержит целое число n (1 ≤ n ≤ 10^9).

Результат:
В первой строчке выведите целое число m. Во второй — целое число k. m^2 должно равняться (k^3)·n; 1 ≤ m, k ≤ 10^100.

Например:
n = 18, m = 12, k = 2.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2015, 23:10
Ответы с готовыми решениями:

Для заданного натурального числа n вывести все пары чисел x, y такие, что n = x^2+y^2
Нужна помощь Для заданного натурального числа n программа выводит все пары чисел x, y, такие,...

Вывести на экран числа от 1000 до 9999 такие, что среди цифр есть цифра 3
Вывести на экран числа от 1000 до 9999 такие, что среди цифр есть цифра 3.

Вывести на экран числа от 1000 до 9999 такие, что среди цифр есть цифра 3
Вывести на экран числа от 1000 до 9999 такие, что среди цифр есть цифра 3.

Вывести на экран числа от 1000 до 9999 такие, что среди цифр нет цифр 5 и цифры 6
Вывести на экран числа от 1000 до 9999 такие, что среди цифр нет цифр 5 и цифры 6.

9
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
04.12.2015, 23:39 2
Alemano, Задача интересная. У вас есть какие-то соображения на этот счет? Или вы хотите, чтобы мы ее решили за вас, а вы прошли бы в следующий тур Олимпиады? На плечах людей, вам совершенно незнакомых. Уверяю вас, этот финт скорее всего не пройдет. Ибо на каком-то этапе все-таки вас попросят объяснить, что именно вы делаете. И на этом этапе вы не просто провалитесь, а не дадите дойти до него людям, соображающим своим умом. Поэтому я принципиально и активно против помощи в решении олимпиадных задач.
Ведь Олимпиады делаются для выявления соображающих ребят, а не тех, кто шустрее в Интернете.
Дурака я попробую научить. Но подлецу руки не подам.
0
5 / 5 / 3
Регистрация: 02.08.2015
Сообщений: 62
04.12.2015, 23:49 3
Лучший ответ Сообщение было отмечено Alemano как решение

Решение

Нету ограничения для m, взял самое большое которое только смог найти
В опщем как то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main() {
    unsigned long long int n = 0;
    unsigned long long int k;
    unsigned long long int m;
    cin >> n;
    for (m = 1; m < 18446744073709551615; m++) {
        for (k = 1; m * m > k * k * k * n && k < 18446744073709551615; k++);
        if (m * m == k * k * k * n) {
            cout << m << endl << k << endl;
            break;
        }
    }
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Байт Посмотреть сообщение
Alemano, Задача интересная. У вас есть какие-то соображения на этот счет? Или вы хотите, чтобы мы ее решили за вас, а вы прошли бы в следующий тур Олимпиады? На плечах людей, вам совершенно незнакомых. Уверяю вас, этот финт скорее всего не пройдет. Ибо на каком-то этапе все-таки вас попросят объяснить, что именно вы делаете. И на этом этапе вы не просто провалитесь, а не дадите дойти до него людям, соображающим своим умом. Поэтому я принципиально и активно против помощи в решении олимпиадных задач.
Ведь Олимпиады делаются для выявления соображающих ребят, а не тех, кто шустрее в Интернете.
Дурака я попробую научить. Но подлецу руки не подам.
Эх, не увидел я твоего сообщения.
А задача интересная, да.
>.<
1
0 / 0 / 0
Регистрация: 03.10.2015
Сообщений: 25
05.12.2015, 00:39  [ТС] 4
Спасибо)) Да, это олимпиадная задача. Но я не участвую в олимпиадах. Преподаватель задаёт нам эти задачи в качестве домашних. Естественно, не все могут решать их. Лично мне не хватает мозгов.
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
05.12.2015, 14:11 5

Не по теме:

Alemano, Прошу прощения за резкие слова. Очень рад, что к вам они не имеют отношения. Просто, знаете, кипело - кипело, и вот вырвалось



Добавлено через 6 минут
Голубь Вася, учитывая, что k <=10100, без длинной арифметики здесь, похоже, не обойтись.
И ваш код хоть и решает логически задачу, но уж больно большой здесь перебор. И неоправданно.

Добавлено через 13 минут
По поводу перебора...
Для каждого m имеет смысл начинать перебор с k = (int) pow((double)n/(m*m), 1.0/3) и заканчивать его(break), как только k*k*k > n*m*m
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
05.12.2015, 18:18 6
Цитата Сообщение от Байт Посмотреть сообщение
учитывая, что k <=10^100, без длинной арифметики здесь, похоже, не обойтись.
Все проще. Факторизуем n (оно вполне разумное и факторизуется), если его множители можно сгруппировать так, что n представимо в виде n = a*a*b, тогда m = a*b*b, k = b. Все. Кота писать лень.

UPD вести с полей - конечно же факторизовать не надо, достаточно найти полный квадрат - однострочник (m может не влезть в int, лучше его (но только его) считать в длинном типе):
C++
1
2
3
int f(int n, int i) {return i*i>n ? 1 : n%(i*i)==0 ? i : f(n, i+(i==2 ? 1 : 2));}
 
int main() {int n,a,k; cin>>n; a=f(n,2),k=n/a/a; cout<<"m = "<<a*k*k<<", k = "<<k;}
А вообще можно ничего не считать и сразу выдать:
C++
1
int main() {int n; cin>>n; cout<<"m = "<<n*n<<", k = "<<n;}
А вы говорите перебор, циклы и длинная арифметика... Как программисты, ей б...гу

Добавлено через 12 минут
ЗЫ вспомнил, что Tulosba предлагал за такие прозрачные и очевидные тернарные цепочки руки отрывать, а иные ссылались на книги, в которых тернарки вообще запрещали
0
221 / 166 / 47
Регистрация: 17.07.2012
Сообщений: 587
05.12.2015, 18:44 7
_Ivana,
C++ (Qt)
1
cout << "m == " << n * 1LL * n << endl;
0
2686 / 2258 / 244
Регистрация: 03.07.2012
Сообщений: 8,219
Записей в блоге: 1
05.12.2015, 18:48 8
Цитата Сообщение от Alemano Посмотреть сообщение
Преподаватель задаёт нам эти задачи в качестве домашних.
Преподаватель хочет оценить ваши способности или умение скопипастить ответ с форума?
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
05.12.2015, 20:33 9
Цитата Сообщение от _Ivana Посмотреть сообщение
А вообще можно ничего не считать и сразу выдать:
Цитата Сообщение от SlavaSSU Посмотреть сообщение
cout << "m == " << n * 1LL * n << endl;
Ребят! Я чегой-то не врубаюсь. В чем шутка юмора? Объясните убогому.
Не исключаю резкое понижение собственных возможностей на фоне двухдневного хождения по гостям. Однако, сколь я ни пялился на ваши предложения, так никуды и не впялился.
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
05.12.2015, 21:31 10
SlavaSSU, ага, или 1LL первым множителем, чтобы дать понять компилятору тип переменной.

Байт, шутка юмора в том, что при разных n задача имеет разное количество решений, но тривиальное есть всегда. Кстати, из примера ТС не следует, но подразумевается минимальное решение. Тогда в моем коте надо искать полный квадрат с конца - с корня четвертой степени вниз до 1.
0
05.12.2015, 21:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2015, 21:31
Помогаю со студенческими работами здесь

Вывести двузначные числа, такие, что если к сумме цифр
Вывести двузначные числа, такие, что если к сумме цифр этого числа прибавить квадрат этой суммы, то...

Вывести на экран числа от 1000 до 9999 такие, что все цифры различны
Вывести на экран числа от 1000 до 9999 такие, что все цифры различны.

Вывести на экран числа от 1000 до 9999 такие, что все цифры различны
Вывести на экран числа от 1000 до 9999 такие, что все цифры различны.

Вывести на экран числа от 1000 до 9999 такие, что все цифры различны
Вывести на экран числа от 1000 до 9999 такие, что все цифры различны.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru