1. Poczytaj o Rozszerzonym algorytmie Euklidesa. Chociaż dla początkującego może to być nietrywialne, ale powinieneś zrozumieć.
2. Zrobić sito Erastotenesa, a później sprawdzać różnice między kolejnymi liczbami pierwszymi?
3. Raczej powinno zamiast dzielenia być dodawanie, bo jeśli chodzi o to co napisałeś to odpowiedź = 0. W przeciwnym rozwiązanie bardzo podobne jak poprzednio.
4. Możesz użyć jakiejś tam funkcji konwertującej liczbę na napis: ... dlib/itoa/
a później naiwnie sprawdzić czy napis jest palindromem. Pewnie to umiesz.
Float to bardzo błędogenny typ, spróbuj użyć long double, jest znacznie dokładniejszy.
Pamiętaj, że wszystkie typy zmienno przecinkowe przechowują tylko przybliżone wartości, nie uzyskasz za ich pomocą dokładnego rozwinięcia dziesiątkowego dużych liczb (większych niż
\(\displaystyle{ 10^{19}}\) w przypadku long double.
PS:
Twój program z silnią po lekkim tuningu:
Kod: Zaznacz cały
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
const double E = exp(1.0);
const double Pi = 2*asin(1.0);
int main()
{
double nsilnia;
int n;
printf("Podaj liczbe n:
");
scanf("%d",&n);
nsilnia = sqrt(2.0*Pi*n)*pow(n/E,n);
printf("n! = %lf
", nsilnia);
system("PAUSE");
return 0;
}
Zmieniłem stałe na znacznie dokładniejsze niż miałeś, mam nadzieje, że wiesz skąd się to bierze.
No i zmieniłem na double (dokładne wyniki do
\(\displaystyle{ 10^{14}}\)}.