22.10.2014, 13:30
Napisałem poniższy program :
" Liczbami Duffy’ego nazywamy liczby naturalne większe od 1 które nie są liczbami pierw-
szymi i których suma dzielników właściwych nie jest podzielna przez żaden z dzielników
właściwych różnych od 1. Napisz program, który dla danej liczby naturalnej
n > 3 znajdzie wszystkie liczby Duffy’ego nie większe od n."
i tu pojawia się moje pytanie do was, jako że styczność z programowaniem mam dopiero od początku tego roku akademickiego, zastanawiam się czy mogę ten program w jakiś sposób zoptymalizować?
Z góry dzięki za pomoc
" Liczbami Duffy’ego nazywamy liczby naturalne większe od 1 które nie są liczbami pierw-
szymi i których suma dzielników właściwych nie jest podzielna przez żaden z dzielników
właściwych różnych od 1. Napisz program, który dla danej liczby naturalnej
n > 3 znajdzie wszystkie liczby Duffy’ego nie większe od n."
i tu pojawia się moje pytanie do was, jako że styczność z programowaniem mam dopiero od początku tego roku akademickiego, zastanawiam się czy mogę ten program w jakiś sposób zoptymalizować?
Z góry dzięki za pomoc
Kod:
#include <stdio.h>
#include <math.h>
int suma_dzielnikow (int n) /*fukcja obliczajaca sume dzielnikow wkasciwych liczby*/
{
int suma, i;
i = 1;
while (i<=(n/2+1))
{
if (n%i==0)
{
suma = suma +i;
}
i++;
}
return suma;
}
/*****************************************************************************************/
int czy_1 (int n) /*fukcja sprawdzajaca czy liczba jest pierwsza*/
{
int dzielnik, i;
dzielnik = n/2;
for (i = 2;i<=dzielnik+1;i++)
{
if ((n%i)==0)
{
return 0; /*to nie liczba pierwsza*/
}
}
return 1;
}
/*****************************************************************************************/
int czyPodz(int n, int suma_prawda) /*sprawdza czy jest liczba Duff'ego*/
{
int i, podzial;
i = 2;
podzial=0;
while (i <= n)
{
if (n%i==0)
{
podzial = i;
}
if (podzial !=0)
{
if (suma_prawda%podzial==0)
{
return 1; /*jesli podzielna przez jakis dzielnik zwraca1*/
}
}
i++;
}
return 0;
}
/*****************************************************************************************/
int main()
{
int czyPierwsza, i, suma, czyDuffiego, n;
do
{
printf("podaj liczbe > 3");
scanf("%d", &n);
}
while (n<=3);
for (i=3;i<=n;i++)
{
czyPierwsza = czy_1(i);
if (czyPierwsza==0) /*gdy nie jest liczba pierwsza*/
{
suma = suma_dzielnikow(i);
czyDuffiego = czyPodz(i, suma);
if (czyDuffiego == 0)
{
printf("%d\n", i);
}
}
}
return 0;
}