Witam. Od jakiegoś czasu zajmuję się problemami związanymi z problemem Collatza, po drodze natrafiłem na konieczność wypisywania oraz sprawdzania właściwości liczb zadanych poniższym wzorem, stąd moja obecność tutaj.
Jak napisać program, będzie liczył czy wśród liczb postaci:
w = (2(x1) + 2(x2) * (p(1))/2 + 2(x3) * p(2)/4 + 2(x4) * p(3)/8 + ... + p(xn)/2(xn)) * 2(y-1)/(2(x+y)-p(y))
są liczby naturalne?
przy czym wykładniki muszą spełniać warunki:
x1, x2, x3, ..., xn należą do liczb (0,x)
oraz
x1 >= x2 >= x3 >= ... xn
do tego n=y-1, czyli wykładników xn jest dokładnie y-1.
Liczby p, x, y mają być dane z góry. Program musi sprawdzić - policzyć wszystkie liczby w, które zadaje wzór. Do tego celu trzeba "wypisać" wszystkie kombinacje x1, x2, x3, ..., xn, zgodnie z podanymi warunkami (ilość tych kombinacji można policzyć z dwumianu Newtona, będzie ich (x+y) po y), a następnie "wstawić" je do wzoru i sprawdzać czy wynik jest całkowity/naturalny.
Utknąłem już na prostym przypadku y=5, gdy próbowałem policzyć wyniki dla zmiennej x1 i dla pozostałych x_k=0. Nawet dla tego prostego przypadku program mi nie działa. Czy ktoś jest w stanie napisać uniwersalny kod dla ogólnego przypadku?
#include<stdio.h>
#include<math.h>
/*Crandall*/
int main(void)
{
long long int p;
long double w;
long long int a;
long long int b;
long long int c;
long long int d;
for(;;)
{
a=0;
b=0;
c=0;
d=0;
printf("podaj liczbe: ");
scanf("%lld",&p);
for(a = 0;a < 34; a++)
{
w = (2<sup>(a) + 2</sup>(b) * (97<sup>(1))/2 + 2</sup>(c) * 97<sup>(2)/4+2</sup>d * 97<sup>(3)/8+ 97</sup>(4)/16) * 4/(2<sup>(33)-97</sup>(5))
printf("%f \n", w);
}
}
return(0);
}
<\code>