** Най-голям общ делител [1.2.3]
* Алгоритъм на Евклид за намиране на най-голям общ делител
// gcd.c
#include <stdio.h>
unsigned gcd1(unsigned a, unsigned b)
{ unsigned swap;
while (b > 0) { swap = b; b =
a%b;
a = swap;
}
return a;
}
unsigned gcd2(unsigned a, unsigned b)
{ return (0 == b) ? a : gcd2(b, a%b); }
int main(void)
{ const unsigned a = 1, b = 125;
printf("%u \n", gcd1(a, b));
printf("%u \n", gcd2(a, b));
return 0;
}
* Да се напише метода само с изваждане.
* Да се напише функция за съкращаване на прости дроби.
Задача 4а. Да се напише
програма за намиране на НОД на n
естествени числа.
void printN(unsigned n)
{ if (n >= 10) printN(n/10);
printf("%u ", n%10);
}
int main(void)
{ unsigned m = 1234;
printN(m);
return 0;
}
* Пресмятане на n! и изследване на ефективността на реализациите [1.2.5]
/* Два варианта за пресмятане на n! [1.2.5] */unsigned k = 0;
void printRed2(unsigned long res)
{
k++;
printf("%lu ", res);
if (k < n) printRed2(res*10);
printf("%lu ", res);
}
unsigned long res = 1;
void printRed3()
{
k++;
res *= 10;
printf("%lu ", res);
if (k < n) printRed3();
printf("%lu ", res);
res /= 10;
}
int main(void)
{
printRed1(1,10);
printf("\n");
printRed2(10);
printf("\n");
k = 0;
printRed3();
printf("\n");
return 0;
}
Задача 4b: За дадено естествено число n (n < 109) да се отпечатат в нарастващ и намаляващ ред числата 10k (0 < k < n).
Задача 4c: За естественото
число a дефинираме редицата
Ако някой
член от редицата
ak = 1, то тази стойност се счита за край на редицата.
Хипотезата е, че всяко
естествено число a генерира крайна редица.