如何使用关联容器解决暴力问题?

问题描述 投票:0回答:1

计算满足a ^ k + b ^ k = c ^ k(2≤k≤20)的(a,b,c)(1≤a,b,c≤n)的数量

如何通过首先恢复^ 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;
}
c++ associative
1个回答
0
投票

对于k> 2,对于^ k + b ^ k = c ^ k不存在解。

来自维基百科: -

在数论中,费马的最后定理表明,对于任何大于2的整数值,没有三个正整数a,b和c满足等式a ^ n + b ^ n = c ^ n。情况n = 1且n =众所周知,自古以来,人们已经有了无数的解决方案。所以你可以尝试只解决k = 2的值。

对于k = 2,您可以使用此link

© www.soinside.com 2019 - 2024. All rights reserved.