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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ switch http://www.cyberforum.ru/cpp-beginners/thread340858.html
swith(n) { case 1: { return 0; // Надо ли в этом случае писать break ? // В каких случаях работа будет нарушена ? } }
C++ Изучение C++: с чего начать и чем продолжить Умею программировать на Паскале, хочу начать изучать С++. Обязательно ли прежде изучить С? Посоветуйте пожалуйста с какой книги начать и какой продолжить. Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread340834.html
Быки и коровы C++
Есть такая задача быки о коровы. Условие: http://********/?main=task&id_task=13. Код моего решения: #include <fstream> #include <string> int main() { std:: string t,f; int buki=0,...
Программирование электроники C++
Уважаемые, я в С++ новичок и хотелось бы поинтересоваться, можно ли программировать устройства на этом языке, какая для этого библиотека существует? (поясню, устройства, ну.. например на производстве...
C++ Пришла в голову мысль http://www.cyberforum.ru/cpp-beginners/thread340797.html
Сделать кнопку.....поместить её на рабочий стол, при нажатии на которую воспроизводился рингтон...для личных целей)) Как её можно написать:D
C++ Convert C++ TO C or how Add Dll to C Наверно тупой вопрос, но я не нашел ответа потому, что поиском не найдешь"C++ в C" на форуме. и в инете тоже нет. Можно ли как-то переконвертировать C++ часть кода в C проект. если нет, то как... подробнее

Показать сообщение отдельно
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
10.08.2011, 20:40
Странный у вас алгоритм какой-то... Все проще, красивее и элегантнее на самом деле. Разложите исходное число на простые множители: x=p1^{k1}...pn^{kn}, где p1<...<pn - простые числа, k1,...,kn - их степени. Тогда ответ на вашу задачу - минимальное значение из чисел k1,...,kn. А ваши логарифмы все портят, точность теряется и многое другое.

Добавлено через 26 минут
Вот функция, вычисляющая наибольшую точную степень числа x


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
#include <limits.h>
 
long Deg(unsigned long x)
{
   long min, i = 2, j, k;
   if (x == 0 || x == 1)
      return -1;
   min = INT_MAX;
   while (x % i != 0)
       i++;
   x /= i;
   j = i;
   k = 1;
   while (x != 1)
   {
      while (x % i != 0)
          i++;
      if (i == j)
         k++;
      else
      {
          if (k < min)
             min = k;
          k = 1;
          j = i;
      }
      x /= i;
   }
   if (k < min)
      min = k;
   return min;
}
Добавлено через 10 минут
Но задачка красивая

Добавлено через 19 минут
Да, и чтобы отрицательные числа тоже корректно обрабатывались, надо кое-что учесть, вот вариант для любых 32-битных целых чисел со знаком и без.

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
#include<limits.h>
#include<math.h>
 
long Deg(long y)
{
   long x, min, i = 2, j, k;
   x = abs(y);
   if (x == 0 || x == 1)
      return -1;
   min = INT_MAX;
   while (x % i != 0)
       i++;
   x /= i;
   j = i;
   k = 1;
   while (x != 1)
   {
      while (x % i != 0)
          i++;
      if (i == j)
         k++;
      else
      {
          if (k < min)
             min = k;
          k = 1;
          j = i;
      }
      x /= i;
   }
   if (k < min)
      min = k;
   if (!(min & 1) && y < 0)
      return 1;
   else
      return min;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.