Для натурального числа n функция тождества Эйлера определяется как количество натуральных чисел в наборе {1,...n}
, которые взаимно просты с n
. Я должен написать программу на языке C, так что для входа n
выход представляет собой функцию тоталя Эйлера n
. Это была моя попытка:Толевая функция Эйлера в C
#include<stdio.h>
int main(void) {
int n,k;
scanf("%d", &n);
for (k=1; k<n; k++) {
if(n%k !=0)
printf("%d\n", k);
}
return 0;
}
Позже я понял, что это должно также дать мне 1
в качестве выходного сигнала для каждого n
, так что я думал, что я мог бы просто добавить это до return 0
:
if(k=1) printf("1");
Но это Безразлично Кажется, очень приятно ... Как я могу написать эту программу более разумно?
', если (к = 1)' ==> ', если (к == 1) '. Но вам понадобится функция GCD [читайте] (https://en.wikipedia.org/wiki/Coprime_integers). –
'if (n% k! = 0)' Это не способ проверить, является ли k взаимно простым с n. Пример: n = 16 и k = 12. –
см. [Функция пользователя Эйлера] (https://en.wikipedia.org/wiki/Euler%27s_totient_function) – BLUEPIXY