自幂数计算,有点懒,网上找代码,没找着执行速度比较快的,反正最快的是直接把答案贴上,直接输出,但也得先找出它们;
懒懒地找了半天,还是自己写个,如下
#include <iostream>
using namespace std;
long long q[11][10] = {
{-1,1,1,1,1,1,1,1,1,1},
{ 0,1,2,3,4,5,6,7,8,9},
{ 0,1,4,9,16,25,36,49,64,81},
{ 0,1,8,27,64,125,216,343,512,729},
{ 0,1,16,81,256,625,1296,2401,4096,6561},
{ 0,1,32,243,1024,3125,7776,16807,32768,59049},
{ 0,1,64,729,4096,15625,46656,117649,262144,531441},
{ 0,1,128,2187,16384,78125,279936,823543,2097152,4782969},
{ 0,1,256,6561,65536,390625,1679616,5764801,16777216,43046721},
{ 0,1,512,19683,262144,1953125,10077696,40353607,134217728,387420489},
{ 0,1,1024,59049,1048576,9765625,60466176,282475249,1073741824,3486784401ULL}
};
void sorta(long long a[], int n) {
for (int i=0; i<n; i++) {
for (int j=i+1; j<n; j++) {
if ( a[i] > a[j] ) {
long long t = a[j];
a[j] = a[i];
a[i] = t;
}
}
}
}
int main() {
long long ans[100] = {0};
int cnt = 1;
for (int t=1; t<=10; t++) {
for (int i0=0; i0<=t; i0++) {
for (int i1=0; i1<=t-i0;i1++) {
for (int i2=0; i2<=t-i0-i1; i2++) {
for (int i3=0; i3<=t-i0-i1-i2; i3++) {
for (int i4=0; i4<=t-i0-i1-i2-i3; i4++) {
for (int i5=0; i5<=t-i0-i1-i2-i3-i4; i5++) {
for (int i6=0; i6<=t-i0-i1-i2-i3-i4-i5; i6++) {
for (int i7=0; i7<=t-i0-i1-i2-i3-i4-i5-i6; i7++) {
for (int i8=0; i8<=t-i0-i1-i2-i3-i4-i5-i6-i7; i8++) {
for (int i9=0; i9<=t-i0-i1-i2-i3-i4-i5-i6-i7-i8; i9++) {
int a[10] = {i0, i1, i2, i3, i4, i5, i6, i7, i8, i9};
int at = 0;
for (int i=0; i<10; i++) {
at+=a[i];
}
if (at!=t) continue;
long long s = 0;
for (int i=0; i<=9; i++) {
s = s+a[i]*q[t][i];
}
int c[10]={0};
long long ss = s;
while (s!=0) {
c[s%10]++;
s=s/10;
}
int f = 1;
for (int i=0; i<10; i++) {
if (a[i] != c[i]) {
f = 0;
break;
}
}
if (f == 1) {
ans[cnt] = ss;
cnt++;
}
}
}
}
}
}
}
}
}
}
}
}
sorta(ans, cnt);
for (int i=0; i<cnt; i++) {
cout << ans[i] << ' ';
}
return 0;
}