uint64_t convertDate(int d, int m, int y)
{
if (m < 3)
{
m += 12; y -= 1;
}
return((d + (153*m - 457) / 5 + 365*y + y/4 - y/100 + y/400 - 306)-693596);
}
typedef long long int enatural;
enatural _euler(enatural n,enatural k)
//шаг рекурсии. n - счетчик по всем числам от 1 до k и условие остановки рекурсии
//k - число, для которого вычисляем функцию Эйлера
{
//функция Эйлера от 1 равна 1
if(n==1)
{
return(1);
}
//функция Эйлера в рекурсивном варианте - если n взаимно просто с k, то она равна 1+(функция Эйлера от n-1)
if(nod(n,k)==1) //если число взаимно просто, увеличиваем количество
{
return(1+_euler(n-1,k));
}
//в противном случае она просто равна функции Эйлера от n-1
return(_euler(n-1,k));
}
enatural euler(enatural n)
{
return(_euler(n,n));
}
Эта книга написана для читателей самых разных степеней математической подготовки и иску-
шенности, поэтому некоторые упражнения предназначены только для читателей с математическим
уклоном. Если в каком-либо упражнении математические понятия или результаты используются
более широко, чем это необходимо для тех, кого в первую очередь интересует программирование ал-
горитмов, то перед оценкой такого упражнения ставится буква ”М”. Если для решения упражнения
требуется знание высшей математики в большем объеме, чем это дано в настоящей книге, то ста-
вятся буквы ”ВМ”. Пометка ”ВМ” отнюдь не является свидетельством того, что данное упражнение
трудное