С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
#1

Точная P-ая степень - C++

10.08.2011, 19:05. Просмотров 2068. Ответов 41
Метки нет (Все метки)

Точная P-ая степень
Число x является точным квадратом, если для некотого целого b, x = b2. Аналогично x является точным кубом, если для некоторого целого b, x = b3. Далее будем утверждать, что x является точной p-ой степенью, если существует такое целое b, что x = bp. По заданному целому x необходимо найти наибольшее p, для которого x является точной p-ой степенью.

Технические условия
Входные данные

Содержит одно число - 32 битовое целое знаковое x, |x| > 1.

Выходные данные

Вывести наибольшее p, для которого x является точной p-ой степенью.

Лимит времени: 1 секунда
Баллы за пройденный тест: 5
Сложность: 25%

Пример
Пример входных данных
Sample 1
17

Sample 2
1073741824 Пример выходных данных
Sample 1
1

Sample 2
30

Вот моя реализация:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cmath>
#define epsilon 1e-3
using namespace std;
 
int main()
{
int i,x,t,n;
double p,k,u;
bool minus=false;
cin >> x;
if (x<0) minus=true;
x=fabs(x);
p=log(x);
n=sqrt(x)+1;
for (i=2; i<=n; i++)
{
if (x%i==0)
{
 k=log(i);
 u=p/k; t=u+epsilon;
 if (u>=t-epsilon && u<=t+epsilon) 
  {
    if (minus) 
    {
     if (t%2==1) { cout << t << endl; return 0; }
    }
   else { cout << t << endl; return 0; }
  } 
}
}
cout << 1 << endl;
return 0;
}
Не проходит 1 тест. Кто может помочь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2011, 19:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Точная P-ая степень (C++):

Точная степень двойки - C++
Само задание: Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае. ...

Вычислить 10-ю степень двойки сложением, умножением и просто возведением в степень. - C++
Написать код на С++ или С# или на Java Вычислить 10-ю степень двойки 1 - сложением, умножением и просто возведением в степень.

Различные варианты инициализации указателя - в чём точная разница между ними? - C++
Немного непонятен один момент. Есть некий класс Statement (конструктор используется по умолчанию). Вот четыре различных записи...

Написать программу с функцией, вычисляющей целую степень дробного числа. Учесть,что степень может быть положительной, отрицательной, нулевой - C++
Написать программу с функцией, вычисляющей целую степень дробного числа. Учесть,что степень может быть положительной, отрицательной,...

Может ли купить покупатель вещь стоимости S так, чтобы у продавца нашлась точная сдача - C++
У покупателя есть n монет достоинством H(1),...,H(n). У продавца есть m монета достоинством B(1),...,B(1). Может ли купить покупатель вещь...

Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++. - C++
Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.

41
soon
11.08.2011, 18:58     Точная P-ая степень
  #16

Не по теме:

я там нашел "Образец решения на с/c++

C++
1
2
3
4
5
6
7
8
9
10
// C++ iostream
#include"iostream.h"
 
int main(){
       int a = 0, b = 0;
       cin >> a;
       cout << a/10 << " " << a%10 <<"\n";
       return 0;
 
} // main
ужаснулся. думал что с std:: заблочит решение. Однако нет, пропустили.

0
Dani
11.08.2011, 19:02
  #17

Не по теме:

На паскале там гораздо проще писать... Я плюнул и решаю на ацмп

1
soon
11.08.2011, 19:06
  #18

Не по теме:

^ аналогично

0
diagon
11.08.2011, 19:15
  #19

Не по теме:

^ аналогично =)
Лучшие попытки рулят.
Да и вообще своебразный такой сайт, на бейсике написан =) Правда форум там никакой...
200 задач почти набил там =)
Дорешаю acmp и e-olimp покорять пойду...

0
soon
11.08.2011, 19:19
  #20

Не по теме:

не советую... хотя это просто мое мнение. но вот 2 кода

C++
1
2
3
4
5
6
7
8
9
10
//my
#include <iostream>
 
int main()
{
   short a;
   std::cin >> a;
   std::cout << a / 10 << ' ' << a % 10;
   return 0;
}
и
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
   short a;
   std::cin >> a;
   std::cout << a / 10 << ' ' << a % 10 << '\n';
   return 0;
}
различия - только в '\n'. Но первый не работает, а второй проходит все тесты.

1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
11.08.2011, 19:24 #21
Цитата Сообщение от diagon Посмотреть сообщение
Не по теме:
^ аналогично =)
Лучшие попытки рулят.
Да и вообще своебразный такой сайт, на бейсике написан =) Правда форум там никакой...
200 задач почти набил там =)
Дорешаю acmp и e-olimp покорять пойду..

Не по теме:

Аналогично, а е-олим не рекомендую там куча нюансов - за всеми не уследишь. Асмпешники тимус хвалят, как вам он?



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от diagon Посмотреть сообщение
Лучшие попытки рулят.
Это да. У тебя есть решение в лучших попытках?

0
IrineK
Заблокирован
11.08.2011, 19:27 #22
Без учета знака:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
 
int main()
{   int x, cur, p = 0, i;
    cout<<"X = ";
    cin>>x;
    
    for(i = 2; i<x/2+1; i++)
    {   p = 0;
        cur = x;
        while(!(cur % i)) 
        {   p++;
            cur /= i;
        }
        if(cur==1)
            break;
    }
    
    cout<<"P = ";
    if(p>1) cout<<p;
    else cout<<"1";
 
    cin.sync();cin.get();
    return 0;
}
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 19:32 #23

Не по теме:

Цитата Сообщение от Dani Посмотреть сообщение
Асмпешники тимус хвалят, как вам он?
Больно много задач и рейтинга вменяемого вроде бы нету... Но то, что он интернациональный для меня плюс.


Цитата Сообщение от Dani Посмотреть сообщение
У тебя есть решение в лучших попытках?
Первые места:


А так я частенько в топ попадал, правда в последнее время забил на него и приучаюсь писать нормальный код.
И вообще, где модераторы? =)
Такой оффтоп лютый стоит...



Цитата Сообщение от IrineK Посмотреть сообщение
Без учета знака:
В задаче же написано - знаковое число.
0
IrineK
Заблокирован
11.08.2011, 19:36 #24
В задаче же написано - знаковое число.
Оставим на доработку автору поста.))
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
11.08.2011, 20:11 #25

Не по теме:

во нафлудили-то


Цитата Сообщение от Olga_ Посмотреть сообщение
Покажите какие числа вы тестируете
Ну, над "Неверный ответ" надо подумать, а с "Исчерпан лимит времени" всё просто. Достотаточно взять большое простое число. Например 2147483647 у меня 40 секунд молотит.
0
IrineK
Заблокирован
11.08.2011, 20:15 #26
2147483647 у меня 40 секунд молотит.
У меня - 20.
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
11.08.2011, 20:18 #27
Цитата Сообщение от IrineK Посмотреть сообщение
У меня - 20.
Ну тут сравнивать лучше в одном месте
Программа из #22 скомпилированная с теми же настройками на том же числе работает у меня 6 секунд. Всё-таки, наверное, недостаточно быстро.
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 20:23 #28
Это убывающая геометрическая прогрессия =)
Код
real	0m9.460s
user	0m8.645s
sys	0m0.008s
P.S. функция возвращает long, а в printf написано %d... Возможно, из-за этого?
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
11.08.2011, 20:47 #29
Цитата Сообщение от diagon Посмотреть сообщение
P.S. функция возвращает long, а в printf написано %d... Возможно, из-за этого?
Поскольку у меня компилятор ругался (у меня long 64 бита), то я, разумеется, заменил %d на %ld
Надо попробовать наоборот, long на int заменить

Добавлено через 54 секунды
diagon, а ты про какую из 2 программ

Добавлено через 3 минуты
Хм, с интом прогамма Ольги работает 11 секунд. Я не думал, что 64-битные вычисления настолько проигрывают. Мда.
0
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
11.08.2011, 21:15  [ТС] #30
Люди моя реализация быстра, только 1 тест не проходит. Кто нибудь может её просто отладить?
А то что мне предлагали исчерпывают лимит времени.
0
11.08.2011, 21:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2011, 21:15
Привет! Вот еще темы с ответами:

степень - C++
создать класс для вычисления числа n в степени k, перегрузить оператор * умножения. помогите перегрузить оператор, желательно с...

Степень - C++
Хочу реализовать 2 в 3 степени .. но не могу докумекать как это сделать .. Каким циклом сделать лучше ? 2*2*2=8 ВНИМАНИЕ НЕ...

Возведение в степень - C++
Вывести на экран таблицу степеней &quot;к&quot;, где те изменяются от 1 до 10,к-вещественое число.оперцию возведения вещественого числа в степень...

Степень симметрии - C++
Только прошу сделайте чем по проще. и через cin cout. Степенью симметрии натурального числа назовём количество пар его десятичных...


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

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

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