считать число (a, b, c) (1≤a, b, c≤n), удовлетворяющее a ^ k + b ^ k = c ^ k (2≤ k ≤ 20)
Как я могу решить эту проблему, сначала восстановив все результаты a ^ k + b ^ k, а затем сопоставив c ^ k соответственно?
Когда я введу n = 10, счет будет 876, почему это произойдет?
#include<iostream>
#include<cmath>
#include<map>
#include<set>
using namespace std;
int main()
{
int n;
cin >> n;
int count = 0;
map<int, set<int> > hash;
for(int k = 2; k <= 20; ++k)
{
set<int> s;
hash[k] = s;
}
for(int c = 1; c <= n; ++c)
for(int k = 2; k <= 20; ++k)
hash[k].insert(pow(c,k));
for(int k = 2; k <= 20; ++k)
cout << "k=" << k << " -- " << hash[k].size() << endl;
for(int k = 2; k <= 20; ++k)
{
for(int a = 1; a <= n; ++a)
for(int b = 1; b <= n; ++b)
{
if(hash[k].find(pow(a,k) + pow(b,k)) != hash[k].end())
count++;
}
}
cout << count << endl;
return 0;
}