Консультация № 183614
14.06.2011, 13:10
55.50 руб.
0 13 2
Здравствуйте, уважаемые эксперты! Помогите пожалуйста решить 2 задачки на C:

1) Дано число N. Найти количество чисел в интервале от 1 до N, взаимно простых с N.
2) Даны натуральные числа m и n. Получить сумму натуральных чисел, меньших n, квадрат суммы цифр которых меньше m.

желательно чтобы это работало на компиляторе Dev-C++

Заранее спасибо.

Обсуждение

давно
Академик
320937
2216
14.06.2011, 13:25
общий
Добрый день! У меня G++/MinGW. Проверьте работу, пожалуйста
Код:
/* Даны натуральные числа m и n. Получить сумму натуральных чисел, */
/* меньших n, квадрат суммы цифр которых меньше m. */
/* G++/Code::Blocks */
#include <stdio.h>
#include <stdlib.h>
int sum(int n);

int main(void)
{
int m, n, s;
int i;
int total;

printf("n=");
scanf("%d", &n);
printf("m=");
scanf("%d", &m);
total=0;
for (i=1; i<n; i++)
{
s=sum(i);
if (s*s<m)
{
if (i>1)
printf("+");
printf("%d",i);
total+=i;
}
}
printf("=%d\n", total);

return 0;
}

int sum(int n)
{
if (n<10)
return n;
else
return n%10+sum(n/10);
};

давно
Академик
320937
2216
14.06.2011, 13:49
общий
И вторую проверьте, заодноЕсли тонкостей в Вашем компиляторе не возникнет - оформлю ответ.
Код:
/* Дано число N. Найти количество чисел в интервале от 1 до N, взаимно простых с N. */
/* G++/Code::Blocks */
#include <stdio.h>
#include <stdlib.h>
int nod(int m, int n);

int main(void)
{
int n;
int i;
int k;

printf("n=");
scanf("%d", &n);

k=0;
for (i=2; i<n; i++)
{
if (nod(n,i)==1)
{
printf("(%d,%d);",n,i);
k++;
}
}
printf("->%d\n", k);

return 0;
}

int nod(int m, int n)
{
if (m==n)
return m;
else if (n>m)
return nod (n,m);
else
return nod(m-n,n);
};

давно
Профессор
230118
3054
14.06.2011, 13:55
общий
это ответ
Здравствуйте, Polotenchikko!

1 задача. Должно работать на любом компиляторе.
Код:
 
#include <stdio.h>
#include <stdlib.h>

int algEuclid(int n, int m)
{
while (n!=0 && m!=0)
{
if (n>m)
n=n%m;
else m=m%n;
}
if(m==0)
return n;
else return m;
}

int main(int argc, char* argv[])
{

int n,i;
int simple_count=0;
printf("n=");
scanf("%d", &n);
for(i=1;i<n;i++)
if(algEuclid(n,i)==1)
simple_count++;

printf("count of simples is %d\n",simple_count);
return 0;
}
5
спасибо большое!
давно
Профессор
230118
3054
14.06.2011, 14:01
общий
Это должно быть именно на C? Можно использовать iostream?
Неизвестный
14.06.2011, 14:14
общий
Адресаты:
да все отлично работает! что мне нужно сделать дальше?
давно
Академик
320937
2216
14.06.2011, 14:18
общий
это ответ
Здравствуйте, Polotenchikko!
Задача 1
Код:
/* Даны натуральные числа m и n. Получить сумму натуральных чисел, */
/* меньших n, квадрат суммы цифр которых меньше m. */
/* G++/Code::Blocks */
#include <stdio.h>
#include <stdlib.h>
int sum(int n);

int main(void)
{
int m, n, s;
int i;
int total;

printf("n=");
scanf("%d", &n);
printf("m=");
scanf("%d", &m);
total=0;
for (i=1; i<n; i++)
{
s=sum(i);
if (s*s<m)
{
if (i>1)
printf("+");
printf("%d",i);
total+=i;
}
}
printf("=%d\n", total);

return 0;
}

int sum(int n)
{
if (n<10)
return n;
else
return n%10+sum(n/10);
};


Задача 2
Код:
/* Дано число N. Найти количество чисел в интервале от 1 до N, взаимно простых с N. */
/* G++/Code::Blocks */
#include <stdio.h>
#include <stdlib.h>
int nod(int m, int n);

int main(void)
{
int n;
int i;
int k;

printf("n=");
scanf("%d", &n);

k=0;
for (i=2; i<n; i++)
{
if (nod(n,i)==1)
{
printf("(%d,%d);",n,i);
k++;
}
}
printf("->%d\n", k);

return 0;
}

int nod(int m, int n)
{
if (m==n)
return m;
else if (n>m)
return nod (n,m);
else
return nod(m-n,n);
};

Удачи!
Неизвестный
14.06.2011, 14:18
общий
Адресаты:
Да именно на си. Спасибо большое! задачи решил Гусятинер Леонид Борисович aka lamed
давно
Академик
320937
2216
14.06.2011, 14:19
общий
Цитата: 377451
что мне нужно сделать дальше?
Разбираться, задавать вопросы в мини-форуме. А вообше-то лето, отдыхать пора :)
давно
Профессор
230118
3054
14.06.2011, 14:29
общий
Адресаты:

Извините, не видела Ваших сообщений, ответила сама. Все же алгоритм Евклида лучше реализовать через остатки, так быстрее.
давно
Профессор
230118
3054
14.06.2011, 14:30
общий
Адресаты:
У Вас оба кода одинаковые.
Неизвестный
14.06.2011, 14:31
общий
Адресаты:
сессия ппц )) экзамен по информатике сегодня ... (
давно
Академик
320937
2216
14.06.2011, 14:53
общий
14.06.2011, 14:55
В ответе было два одинаковых кода. Внес изменения. Удачи на сессии!
давно
Академик
320937
2216
14.06.2011, 14:54
общий
Адресаты:
Добрый день! Спасибо за подсказку.
Форма ответа