7 / 7 / 0
Регистрация: 28.09.2009
Сообщений: 52
1

Является ли число степенью другого числа

24.11.2010, 19:07. Показов 6692. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужна функция которая проверяет, является ли число степенью какого либо другого числа.
Ломаю голову, но пока не смог придумать как это сделать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2010, 19:07
Ответы с готовыми решениями:

Определить, является ли натуральное число степенью другого числа
Помогите написать программу используя while или do...while. : Составить программу для...

Помогите, ГОС экзамен! Является ли число степенью другого числа
Нужно написать программу определения является ли натуральное число степенью какого-либо...

Определите, является ли число степенью числа 2, и если является, то выведите значение этой степени
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то...

Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то выведите значение этой степени
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то...

25
13 / 2 / 0
Регистрация: 24.11.2010
Сообщений: 10
24.11.2010, 19:17 2
Цитата Сообщение от Killan Посмотреть сообщение
как это сделать
нужно перебирать число (К) от 1 и дальше и перебирать степень (О) до тех пор, пока число К в степени О меньше заданого
если К в степени О равно нашему числу, значит ответ положительный
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
24.11.2010, 19:26 3
Killan, вспоминайте математику. Есть такая замечательная функция под названием логарифм.
0
7 / 7 / 0
Регистрация: 28.09.2009
Сообщений: 52
24.11.2010, 19:47  [ТС] 4
RepoMen
Мм... принцип понял, но мне кажется это слишком громоздко, а если число в несколько тысяч ?
Перебор затянется...
gooseim
В прошлом с математикой не дружил, стал её нормально понимать, только после того как увлекся программированием, но логарифм это для меня жуткое ругательство)
Если не сложно объясните принцип, или покажите пример.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
24.11.2010, 19:49 5
Цитата Сообщение от Killan Посмотреть сообщение
Нужна функция которая проверяет, является ли число степенью какого либо другого числа.
что нужно вывести в ответ (просто да или нет)
привели свое число и ответ
0
7 / 7 / 0
Регистрация: 28.09.2009
Сообщений: 52
24.11.2010, 19:56  [ТС] 6
Нужно получить именно числа, которые при возведении в степень дадут искомое число.
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
24.11.2010, 20:05 7
x^y=z
log(x, z)=y
вот и вся математика

Добавлено через 3 минуты
x=z^(1/y)
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
24.11.2010, 20:33 8
Цитата Сообщение от Killan Посмотреть сообщение
Нужно получить именно числа, которые при возведении в степень дадут искомое число.
Вы сами хотя бы поняли что сказали
а где пример
0
7 / 7 / 0
Регистрация: 28.09.2009
Сообщений: 52
24.11.2010, 20:35  [ТС] 9
Цитата Сообщение от gooseim Посмотреть сообщение
x^y=z
log(x, z)=y
вот и вся математика

Добавлено через 3 минуты
x=z^(1/y)
Как я понял, тут имея 2 значения можно найти третье.
Допустим, z==9.
Тогда уравнения выглядят так:
3^2=9
log(3, 9)=2
3=9^(1/2)

Но мне известно только одно число, допустим
49=x(7)^y(2) - [x и y мне не известны.]
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
24.11.2010, 20:40 10
Killan, тогда видимо только перебором. Я думал 2 числа известны.
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.11.2010, 20:52 11
Перебирать тут надо только основание логарифма, а результат проверять на "целость". Если логарифм z по очередному основанию y равен x, и этот x целый - то x есть искомое основание степени, а основание логарифма y - показатель степени.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
24.11.2010, 21:18 12
Цитата Сообщение от Killan Посмотреть сообщение
49=x^y - [x и y мне не известны.]
C
1
2
3
4
5
6
7
8
9
10
11
12
 int a=49, f=0;
int w; //степень
for (int i=2; i<=sqrt(a); i++)  
{ w=0;
   if (a%i==0)
       while (a) {
         if (a%i!=0)
          break
       a/=i; w++;}
if (!a)
{ f=1; break; }  }
  // i^w=a
Добавлено через 19 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int a=4, i, f=0;
int w; //степень
for ( i=2; i<=sqrt(a); i++)
{ w=0;
   if (a%i==0)
       while (a!=1) {
         if (a%i!=0)
          break;
       a/=i; w++;}
if (a==1)
{ f=1; break; }  }
  // i^w=a
 
         if (f)
         printf ("%d - %d", i, w);
подкорректировал, но ты еще через отладчик доделай, у меня просто времени больше нет
1
0 / 0 / 0
Регистрация: 31.05.2023
Сообщений: 1
31.05.2023, 18:02 13
!!!Использовал scanf_s
выражение вида b^x=a. Сначала вводим a, потом b.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
 
int RIVERSIDE(int a, int b, int* power) {
    if (a == 0 && b == 0) {
        *power = 'any'; 
        return 1;
    }
 
    if (a == 1 && b == 0) {
        *power = 0; 
        return 1;
    }
 
    if (a == 1) {
        *power = 0; 
        return 1;
    }
 
    int temp = a;
    *power = 0; 
 
    while (temp != 1) {
        if (temp % b != 0) {
            *power = 0; 
            return 0;
        }
        temp /= b;
        (*power)++;
    }
 
    return 1; 
}
 
int main() {
    int a, b;
    int power; 
 
    printf("Enter number a: ");
    if (scanf_s("%d", &a) != 1) {
        printf("Input error for number a.\n");
        return 1;
    }
 
    printf("Enter number b: ");
    if (scanf_s("%d", &b) != 1) {
        printf("Input error for number b.\n");
        return 1;
    }
 
    int result = RIVERSIDE(a, b, &power);
 
    if (result == 1) {
        printf("%d is a power of number %d (power = %d).\n", a, b, power);
    }
    else if (result == 0) {
        printf("%d is not a power of number %d.\n", a, b);
    }
 
    return 0;
}
0
Вездепух
Эксперт CЭксперт С++
11688 / 6367 / 1723
Регистрация: 18.10.2014
Сообщений: 16,050
31.05.2023, 18:12 14
Цитата Сообщение от RIVERSIDE Посмотреть сообщение
выражение вида b^x=a. Сначала вводим a, потом b.
В задании не допускается "потом b". В задании вводится только a. b - неизвестно.

---

Цитата Сообщение от Killan Посмотреть сообщение
Нужна функция которая проверяет, является ли число степенью какого либо другого числа.
Задача решается путем разложения числа на простые делители. После чего вычисляется НОД всех степеней простых делителей. Этот НОД - это и есть искомая степень. Если он равен 1, то число не является степенью другого числа (или, другими словами, является первой степенью самого себя)

Например, число 498433531640625.

Разложение на простые делители дает 312*58*74. НОД(12, 8, 4) = 4. То есть число является четвертой степенью какого-то другого числа. Разделим показатели степеней в разложении на 4 и получим это другое число: 33*52*7 = 4725.

То есть 498433531640625 = 47254
0
Заблокирован
31.05.2023, 18:18 15
Цитата Сообщение от Killan Посмотреть сообщение
Является ли число степенью другого числа
Число и степень целые?
0
3249 / 1470 / 468
Регистрация: 01.06.2021
Сообщений: 4,961
31.05.2023, 18:47 16
Verevkin, если в условии не сказано, то значит это седенионы...
0
Заблокирован
31.05.2023, 19:05 17
Цитата Сообщение от Royal_X Посмотреть сообщение
это седенионы...


Добавлено через 15 минут
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
То есть 498433531640625 = 47254
А квадрат где? 498433531640625 = 223256252.
0
390 / 365 / 111
Регистрация: 03.02.2013
Сообщений: 1,120
31.05.2023, 20:06 18
то значит это седенионы
а вдруг седеонионы над полем гипервещественных или сюрреальных чисел, нужно уточнить

Добавлено через 6 минут
по теме, если речь идёт о целых числах x^z=y, я бы разложил z в гауссово представление и там есть обобщение теоремы Эйлера на гауссовы числа, где можно найти все возможные комбинации оснований и степеней просто перемножая скобки
0
3249 / 1470 / 468
Регистрация: 01.06.2021
Сообщений: 4,961
31.05.2023, 20:18 19
Цитата Сообщение от abit Посмотреть сообщение
а вдруг седеонионы над полем гипервещественных или сюрреальных чисел, нужно уточнить
Мой пост намекал лишь на то, что если ТС не написал, о каких числах идет речь в условии, то нужно обратиться к здравому смыслу, а если возможных вариантов решения выходит несколько, то нужно выбрать самый простой. В данном случае, можно рассмотреть условие так, что там говорится о натуральных числах. А вот не решать задачу, пока ТС не отвечает, можно в случаях, когда без уточнения условия решение задачи в таком виде, в каком она есть, вообще невозможно.
0
Вездепух
Эксперт CЭксперт С++
11688 / 6367 / 1723
Регистрация: 18.10.2014
Сообщений: 16,050
31.05.2023, 20:38 20
Цитата Сообщение от Verevkin Посмотреть сообщение
А квадрат где? 498433531640625 = 223256252.
Какая разница, где? Задача требует лишь ответа вида "да/нет". Это все.

Все остальное - лишь необязательные пояснительные иллюстрации. Понятно, что вышеупомянутый мною НОД даст максимально возможную степень. А все остальные степени, если вам вдруг приспичило их увидеть, легко получаются как уникальные делители этого НОД. В моем примере это будет 4 и 2.
0
31.05.2023, 20:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2023, 20:38
Помогаю со студенческими работами здесь

Функция определяющая является ли число степенью числа 5
Приветствую господа, буду очень благодарен если вы поможете мне решить одну задачу) Описать...

Определить, является ли натуральное число k степенью числа
2. Составить программу для определения, является ли натуральное число k степенью числаВнимательнее...

Проверить, является ли вводимое число степенью числа 3
Помогите, в 22 строке выводит ошибку: &quot;Требуется while&quot;. Программа должна проверять вводимое число...

Фунция, проверяющая, является ли число степенью числа 5
Описать функцию IsPower5(K) логического типа, возвращающую True, если целый параметр K (&gt; 0)...


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

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

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