Ciao. Ho appena scritto il teorema dei quattro quadrati, tuttavia a parte nei primi due casi di test, il programma riceve un sigkill da linux (nonostante non vado a violare i limiti di memoria). Idee?
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int cache[202][4] = {{}};
int calcola(int n, int index, int prev)
{
//if (cache[n][index] != 0)
// return cache[n][index]-1;
int rad = sqrt(n);
int s = 0;
if (index == 0)
{
if (rad*rad == n)
{
if (prev < rad)
return 0;
//for (int i=0; i<3-index; i++)
// cout << " ";
//cout << rad << endl;
cache[n][index] = 2;
return 1;
}
else
{
cache[n][index] = 1;
return 0;
}
} else {
for (int i=rad; i>=0; i--)
{
if (prev < i)
continue;
//for (int i=0; i<3-index; i++)
// cout << " ";
//cout << i << endl;
s += calcola(n-i*i, index-1,i);
}
cache[n][index] = s+1;
return s;
}
}
int main()
{
ifstream input("input.txt");
ofstream output("output.txt");
int n;
int t;
input >> n;
for (int i=0; i<n; i++)
{
input >> t;
output << calcola(t, 3,t);
if (i < n-1)
output << " ";
}
return 0;
}