这是一种解决方案:
#include <stdio.h> #include <math.h>
int main() { int n; scanf("%d", &n); // 读入数字
// 从2开始枚举M,找到最小的M的N次方等于n for (int m = 2; m <= sqrt(n); m++) { int nn = log(n) / log(m); // 计算M的N次方等于n if (pow(m, nn) == n) { // 如果找到了 printf("%d %d\n", m, nn); // 输出结果 return 0; // 结束程序 } }
// 如果枚举完了还没找到,那就只能输出n的1次方了 printf("%d 1\n", n); return 0; }