Mam do skodzenia takie zadanko:
http://www.main2.edu.pl/c/konkurs-podstaw-algorytmiki/p/tar/
Muszę przyspieszyć program, a konkretniej to algorytm bo już programu chyba bardziej się nie da. Jest on napisany w czystym C:
#include <stdio.h>
#include <math.h>
int z;
unsigned long long p,q;
int lewa, prawa, x;
int main()
{
scanf("%d", &z);
while(z--)
{
scanf("%u %u", &p, &q);
lewa = 0;
prawa = pow(q-p, 1/3.0);
while(lewa < prawa)
{
x = (lewa+prawa+1)/2;
if(x*x*x<q-p*x)
{
lewa = x+1;
}
else
prawa = x;
}
if(lewa*lewa*lewa == q - p*lewa)
printf("%d\n", lewa);
else
printf("NIE\n");
}
}
Co do algorytmu, wyszukuję binarnie wszystkie możliwe rozwiązania równania (na podstawie porównań w pętli). Mam zbyt mało czasu. Może jest to spowodowane tym, że program się zapętla a może po prostu da się to jakoś przyspieszyć. Macie jakieś pomysły?