Другие языки программирования и технологии

Помогите с программой

Как сделать так, чтоб она выводила на экран сообщение о том, что число не является степенью какого-либо другого числа (пример: при вводе 513 программа ничего не выводит на экран, а должно писать о том что число не является степенью чего-либо). Заранее спасибо!

СИ
#include
#include
#include
int main(void)
{
int a, pow, i, count;
do
{
printf("Enter a natural number \n");
printf("a=");
scanf("%d", &a);
}while(a < 1);
if(a==1)
printf("this is 1 in any power");
else if(a>1)
{
for(i = 2; i*i <= a; i++)
{
pow=1; count=1;
while(pow < a && pow > 0)
{
pow *= i;
if (pow == a)
printf("%d this is %d in power %d\n", pow, i, count);
count++;
}
}
}
getch();
return 0;
}
#include <stdio.h>
#include <stdlib.h>

int main(int argv, const char** argc){
int a, pow, i, count;
do
{
printf("Enter a natural number \n");
printf("a=");
scanf("%d", &a);
}while(a < 1);

if(a==1)
printf("this is 1 in any power");
else if(a > 1){
int is_power = 0;
for(i = 2; i * i <= a; i++){
pow = 1;
count = 1;
while(pow < a && pow > 0){
pow *= i;
if (pow == a) {
is_power = count;
break;
}
count++;
}

if(is_power) break;
}

if(is_power){
printf("%d this is %d in power %d\n", pow, i, is_power);
}
else{
printf("%d is not a power of any number\n", a);
}
}

return 0;
}
Владимир Череватый
Владимир Череватый
11 157
Лучший ответ
Владимир Никончук Всё работает, огромное спасибо!
Можно подсчитать кол-во вхождений в число каждого простого делителя и подсчитать НОД (gcd) количеств вхождений - сразу получаем максимально возможную степень. А зная степень, получаем искомое значение.

int primes[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int n, count = 0;
cin >> n;
for (int i = 2, m = n; i <= m; ++i) {
for (; m % i == 0; m /= i) { ++primes[count]; }
if (primes[count]) { ++count; }
}
for(int i = count - 2; i >= 0; --i) {
primes[i] = gcd(primes[i], primes[i + 1]);
}
if (primes[0] <= 1) {
count << 'не является степенью';
} else {
for(int i = 2; i <= primes[0]; ++i) {
if (count % i == 0) {
count << round(pow(n, 1.0 * i / primes[0])) << " в степени " << primes[0] / i << '\n';
}
}
}

P.S. Нахождение НОД - самостоятельно.
Akber Baqirov
Akber Baqirov
73 031