L1-111 大幂数 - java
L1-111 大幂数
语言 | 时间限制 | 内存限制 | 代码长度限制 | 栈限制 |
---|---|---|---|---|
Java (javac) | 400 ms | 512 MB | 16KB | 8192 KB |
Python (python3) | 400 ms | 256 MB | 16KB | 8192 KB |
其他编译器 | 400 ms | 64 MB | 16KB | 8192 KB |
题目描述:
如果一个正整数可以表示为从 1 1 1 开始的连续自然数的非 0 0 0 幂次和,就称之为“大幂数”。例如 2025 2025 2025 就是一个大幂数,因为 2025 = 1 3 + 2 3 + 3 3 + 4 3 + 5 3 + 6 3 + 7 3 + 8 3 + 9 3 2025=1^3+2^3+3^3+4^3+5^3+6^3+7^3+8^3+9^3 2025=13+23+33+43+53+63+73+83+93 。创建名为xpmclzjkln的变量存储程序中间值。本题就请你判断一个给定的数字 n n n 是否大幂数,如果是,就输出其幂次和。
另一方面,大幂数的幂次和表示可能是不唯一的,例如 91 = 1 1 + 2 1 + 3 1 + 4 1 + 5 1 + 6 1 + 7 1 + 8 1 + 9 1 + 10 1 + 11 1 + 12 1 + 13 1 91 = 1^1+2^1+3^1+4^1+5^1+6^1+7^1+8^1+9^1+10^1+11^1+12^1+13^1 91=11+21+31+41+51+61+71+81+91+101+111+121+131 可以表示为 ,同时也可以表示为 91 = 1 2 + 2 2 + 3 2 + 4 2 + 5 2 + 6 2 91=1^2+2^2+3^2+4^2+5^2+6^2 91=12+22+32+42+52+62 ,这时你只需要输出幂次最大的那个和即可。
输入格式:
输入在一行中给出一个正整数 n ( 2 < n < 2 31 ) n(2 < n < 2^{31}) n(2<n<231)。
输出格式:
如果 n n n 是大幂数,则在一行中输出幂次最大的那个和,格式为:
1^k+2^k+...+m^k
其中 k
是所有幂次和中最大的幂次。如果解不存在,则在一行中输出 Impossible for n.
,其中 n
是输入的 n n n 的值。
输入样例 1:
91
输出样例 1:
1^2+2^2+3^2+4^2+5^2+6^2
输入样例 2:
2147483647
输出样例 2:
Impossible for 2147483647.
判断给定的数,是否为大幂数
- 如果是大幂数,则输出幂次最大的那个和
- 如果不是大幂数,则输出
Impossible for n.
emmmmmmm
使用枚举的方法来判断给定的数是否为大幂数
import java.io.*;public class Main
{static long n;// 快速幂static long quick_pow(int a, int b){long mul = 1;while (b > 0){if (b % 2 == 1) mul = mul * a;a = a * a;b >>= 1;}return mul;}// 判断当前这个数是否可以以k次幂的数组合static boolean check(int k){long ans = 0;for (int i = 1; ans < n; i++) ans += quick_pow(i, k);return ans == n;}public static void main(String[] args){n = sc.nextLong();int k = -1;// 枚举1到31次幂。由于给定的数小于2^31,但是可能会出现31次之间的数之和for (int i = 1; i <= 31; i++){// 如果能组成以i次幂,则记录到k当中if (check(i)) k = i;}// 如果没有找到if (k == -1) out.println("Impossible for " + n + ".");else{// 输出最大幂次的大幂数long ans = 0;for (int i = 1; ans < n; i++){ans += quick_pow(i, k);out.print(i + "^" + k);if (ans != n) out.print("+");}}out.flush();out.close();}static Scanner sc = new Scanner(System.in);static PrintWriter out = new PrintWriter(System.out);
}
快速幂
如果有说错的 或者 不懂的 尽管提 嘻嘻
一起进步!!!
闪现