Re: задачка: A^3+B^3+C^3=D^3
- From
- Oleg I. Khovayko ()
- To
- Vjacheslav Maslov ()
- Date
- 2003-03-07T20:29:52Z
- Area
- RU.ALGORITHMS
From: "Oleg I. Khovayko" <olegh@ncbi.nlm.nih.gov>
Vjacheslav Maslov wrote:
>
> Работает, но медленно где-то 5-7 минут. Один мой знакомый утверждает, что
> придумал алгоритм решения этой задачи, который отрабатывает за 2 сек на машине
> класса P III.
Ну вот ниже решение. Отрабатывает, правда, не ровно за 2 секунды, но сопоставимо:
real 0m2.402s
user 0m2.190s
sys 0m0.210s
Если раскомментировать вывод - еще секунда добавится...
#include <map>
#include <set>
#include <iostream>
using namespace std;
int calc(int max) {
map< int, set< int > > cd;
int rescount = 0;
for(short d = 2; d <= max; d++)
for(short c = 1; c < d; c++)
cd[d*d*d-c*c*c].insert((c << 16) | d);
for(short a = 1; a <= max; a++)
for(short b = a; b <= max; b++) {
int ab = a*a*a + b*b*b;
if(cd.count(ab)) {
const set< int > &cds = cd[ab];
for(set< int >::const_iterator it(cds.begin());
it != cds.end(); ++it) {
rescount++;
// cout << "Result: " << a << " " << b << " "
// << (*it >> 16) << " = " << ((short)*it) << endl;
}
}
}
return rescount;
}
main() {
int cnt = calc(1000);
cout << "Found results:" << cnt << endl;
}
--
#include <best/regards.hpp>
Oleg I. KHOVAYKO
(301)435-5885 || WEB: http://olegh.spedia.net
--- ifmail v.2.15dev5
* Origin: National Center for Biotechnology Information (2:5020/400)