Другие языки программирования и технологии

Помогите написать задачу на языке С

Задача такая: Даны натуральные числа n и m. Найти все натуральные числа, меньше n и взаимно простые с m Заранее спасибо
Задача эта решается так (комментарии прилагаются к коду) :
=================БЕСПЛАТНО! =======================
#include <stdio.h>

// Функция определения НОД (a, b)
// по алгоритму Евклида.
int NOD(int a, int b)
{
// Пока a и b оба не равны нулю.
while(a != 0 && b != 0)
{
// Если a больше b.
if(a > b)
{
// % - нахождение остатка от деления.
a = a % b;
}
// Иначе.
else
{
b = b % a;
}
}
// Вернуть a или b, поскольку к точке
// выхода либо a либо b обязательно
// равно нулю.
return a + b;
}

// Главная функция программы.
int main()
{
int n = 0;
int m = 0;

// Считываем с консоли n и m.
printf("Input n m: ");
scanf("%d %d", &n, &m);

// Dig - число, которое по условию
// меньше n и является кандидатом
// на взаимно-простое с m.
int dig = 0;
// Пока dig меньше n.
while(dig < n)
{
// Если НОД (dig, m) равен единице,
// числа dig и m взаимно-простые.
if(NOD(dig, m) == 1)
{
printf("%d and %d is coprime numbers\n", dig, m);
}
// Увеличение значения dig на единицу.
dig++;
}
// Для остановки выполнения программы.
getchar();
getchar();
}
==================================================

Ресурс по алгоритму Евклида: http://younglinux.info/algorithm/euclidean

Код работает, проверен на msvc2010.

Если будут дополнительные вопросы, пиши в ICQ: 228004347 или Агент.
Кирилл Фёдоров
Кирилл Фёдоров
7 465
Лучший ответ
#include <stdio.h>
int gcd(int a, int b) {
while(b) b^=a^=b^=a%=b;
return a;
}
int main() {
scanf("%d %d",&n,&m);

while (--n>0) {
if (gcd(n,m)==1) {
printf("%d\n",n);
}
}

return 0;
}
Стучи в аську, за небольшую плату решу быстро и качественно.
648964446