Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114

Обход делителя и взаимнопростые

04.03.2022, 17:03. Показов 3030. Ответов 5
Метки f#, net (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,
Задача: На основе написанных функций(числа Эйлера и НОД) построить функции обход делителей с условием и обход взаимнопростых с условием. Протестировать написанные функции.
Вот функции который я построил: Эйлер
F#
1
2
3
4
5
6
7
8
9
let rec euler (startnumber:float) eps numFact funFact = 
    match startnumber with 
    |startnumber when 1.0/(funFact numFact) > eps -> euler (startnumber + (1.0/(funFact numFact))) eps (numFact+1.0) funFact 
    |startnumber -> startnumber
 
let rec factorial number = 
    match number with 
    |number when number>1.0 ->number*factorial(number-1.0) 
    |number -> 1.0
НОД
F#
1
2
3
4
5
let rec nod number1 number2 number3 = 
    match number3 with 
    |number3 when number1>0 && number2 >0 && number1>number2 -> nod (number1%number2) number2 number3 
    |number3 when number1>0 && number2 >0 && number1<number2 -> nod number1 (number2%number1) number3 
    |number3 -> number1+number2
Мои попытки :
F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
let rec euler startnumber eps numFact maxFact funFact = 
    match startnumber with 
    |startnumber when (1.0/(funFact numFact) > eps) && numFact<maxFact -> euler (startnumber + (1.0/(funFact numFact))) eps (numFact+1.0) maxFact funFact 
    |startnumber -> startnumber//printfn "euler for div : %f" startnumber 
 
 
let rec factorial number = 
    match number with 
    |number when number>1.0 ->number*factorial(number-1.0) 
    |number -> 1.0 
 
  
let rec Divisor number currentNumber funEulerDivisor = 
    let d = fun (x:float) -> euler 0.0 0.00001 1.0 number factorial 
    match number with 
    |number when number = 0 -> 0
    |number when (currentNumber%number=0) -> Divisor (number-1) currentNumber (d number)
    |number -> Divisor (number-1) currentNumber funEulerDivisor 
 
 
[<EntryPoint>] 
 
let main argv =  
    let divisorEuler = fun fEulerDiv (x:int) (y:int) eulerdiv -> printfn "Эйлерого число делителей числа %d : %d"  x (fEulerDiv x y eulerdiv) 
    divisorEuler Divisor 5 5 euler 
    0 // возвращение целочисленного кода выхода
Прошу помочь с данным заданием. Описание моих действий:
1) что я хочу в данном в случае - в функцию Divisor я отправляю ф. euler , затем когда я найду делитель числа , я хочу чтобы из этой функции я перешел к euler КОТОРЫЙ принимает в качестве 4 арг функцию факториал , после того как эйлер для данного числа числа найден - число выводится и снова возвращеся к Diviser и дальше поиски...
Проблема:
1)я не могу до конца понять, в F# нельзя отправлять вместе Int & Float в функцию?
2) Проблема в функции Divisor когда я number сравниваю, ошибка, потому что он стал float , хотя изначально я отправляю Int
как исправить?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.03.2022, 17:03
Ответы с готовыми решениями:

Взаимнопростые числа
Составить программу, проверяющую, являются ли данные три числа взаимно простыми. Написал программу работает верно, помогите пожалуйста её в...

Получить все делители числа q, взаимнопростые с p
Даны натуральные числа p и q. Получить все делители числа q, взаимнопростые с p. Используя файлы .txt

Получить все делители числа q, которые взаимнопростые с p
Даны целые числа p и q. Получить все делители числа q, которые взаимнопростые с p. Нужно написать используя оператор if, goto метки и...

5
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
04.03.2022, 18:09
Что такое "число Эйлера"?

Что такое "обход делителей с условием и обход взаимнопростых с условием"?

Зачем float в целочисленной (или я не прав?) теории?
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
04.03.2022, 18:35
Цитата Сообщение от kilo45 Посмотреть сообщение
let rec nod number1 number2 number3 =
Рекомендую избегать:

1) бессмысленных длинных названий типа "number1"
В данном случае, код станет более читабельным, если назвать параметры a b c

2) латинизированных русских слов тип "nod"
В данном случае, лучше назвать функцию gcd... А ещё лучше - gcd3, так как gcd общепринято для двух аргументов

3) написания функций "с нуля", если их можно выразить через стандартные функции
F#
1
2
3
4
5
6
let rec gcd a b =
    if b = 0 then a
    else gcd b (a % b)
    
let gcd3 a b c =
    gcd (gcd a b) c
1
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
04.03.2022, 18:54  [ТС]
Shamil1, число Эйлера приблизительно равно 2,729... это имеется ввиду,
2) Здесь "условие" можно опустить , так как я понимаю это скорее либо самому придумать либо преподаватель даст(например только четные
2.1) Я понял , что для каждого делителя числа ищем число Эйлера возможно я не прав
Но у меня получилось это сделать (код выложу когда приведу в порядок)
2.2) Взаимнопростые здесь я думаю, что просто искать взаимнопростые через НОД и выводить
3)теории не до конца понял, но float нужен чтобы вычислить число Эйлера , а когда просто int отправляю , то спокойная жизнь заканчивается

1-2) С названиями еще не привык, так как предпочитаю давать более поясняющие название - но здесь параметры , и я учту ваш совет
3)Спасибо

Если я не правильно понимаю 2.1 то поправьте меня)
Cпасибо
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
04.03.2022, 19:20
Лучший ответ Сообщение было отмечено kilo45 как решение

Решение

Цитата Сообщение от kilo45 Посмотреть сообщение
для каждого делителя числа ищем число Эйлера
Я не понимаю, зачем искать одно и то же число для каждого делителя?
Лично у меня сложилось впечатление, что имеется ввиду функция Эйлера.
Фу́нкция Э́йлера φ ( n ) — мультипликативная арифметическая функция, значение которой равно количеству натуральных чисел, не превышающих n и взаимно простых с ним.


Текст задания исходно на русском или перевод с другого языка?
Возможно, имеется ввиду обход всех делителей заданного числа и вычисление для каждого из них значения функции Эйлера.

Цитата Сообщение от kilo45 Посмотреть сообщение
когда просто int отправляю
F#
1
2
3
4
5
// Ошибка компиляции: The type 'float' does not match the type 'int'
let test (x: int) = x * 2.0 
 
// Нужно использовать явное приведение типов
let test (x: int) = (float x) * 2.0
0
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
04.03.2022, 20:17  [ТС]
Предыдущие задание : Построить отдельные функции для вычисления числа Эйлера и НОД. <-- эти функции использовать
Возможно вы правы , да на русском (сам не до конца понимаю), как тогда можно использовать число Эйлера для делителей и взаимнопростых?
Взаимнопростые можно найти через НОД , это использовали , а число Эйлера не пойму
Вот мой код, НО не пойму почему игнорируется simNumGCD в главной (
F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
let rec euler st eps numFact limFact funFact = 
    match st with 
    |st when (1.0/(funFact numFact) > eps) && numFact<limFact -> euler (st + (1.0/(funFact numFact))) eps (numFact+1.0) limFact funFact 
    |st -> printfn "euler for div %d: %f" (int limFact) st
 
 
let rec factorial num = 
    match num with 
    |num when num>1.0 ->num*factorial(num-1.0) 
    |num -> 1.0 
 
let rec div num constNum  = 
    let eulerDiv = fun (x:float) -> euler 1.0 0.00001 1.0 num factorial
    match num with 
    |num when (int num) = 0 -> 0
    |num when (constNum%(int num)=0) -> (eulerDiv num);div (num-1.0) constNum
    |num -> div (num-1.0) constNum  
 
(*simple number*)
let rec sn n1 n2 funGCD =
    match n1 with
    |n1 when (funGCD n1 n2)=1 -> printfn "%d " n2;sn n1 (n2-1) funGCD
    |n1 when (funGCD n1 n2)<>1 -> sn n1 (n2-1) funGCD
    |n1 when n2=0 -> 0
 
 (*greatest common divisor- НОД*)
let rec gcd n1 n2 n3 = 
    match n3 with 
    |n3 when n1>0 && n2 >0 && n1>n2 -> gcd (n1%n2) n2 n3 
    |n3 when n1>0 && n2 >0 && n1<n2 -> gcd n1 (n2%n1) n3 
    |n3 -> n1+n2 
 
[<EntryPoint>] 
let main argv =  
    let divisorEuler = fun f (x:float) (y:int) -> (f x y) 
    let result = divisorEuler div 10.0 10; 
    let simNumGCD = fun g (x1:int) (y1:int) fungcd -> (g x1 y1 fungcd) 
    let result2 = simNumGCD sn 58 58
    0 // возвращение целочисленного кода выхода
Добавлено через 41 минуту
Виноват, поправил код
F#
1
2
3
4
5
6
[<EntryPoint>] 
let main argv =  
    let divisorEuler = fun f (x:float) (y:int) -> (f x y) 
    let result = divisorEuler div 10.0 10; 
    let simNumGCD = fun g (x1:int) (y1:int) fungcd -> (g x1 y1 fungcd) 
    let result = simNumGCD sn 5 5 gcd
F#
1
2
3
4
5
let rec sn n1 n2 funGCD =
    match n2 with
    |n2 when ((funGCD n1 n2 0)=1)&&n2<>0 -> printfn "%d " n2; sn n1 (n2-1) funGCD
    |n2 when ((funGCD n1 n2 0)<>1) && n2<>0-> sn n1 (n2-1) funGCD
    |n2 -> n2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2022, 20:17
Помогаю со студенческими работами здесь

Сократить дробь, чтобы числитель и знаменатель были взаимнопростые
Даны два натуральных числа :m,n (1..9999),образующие дробь вида m/n. ократить дробь, что бы числитель и знаменатель были взаимнопростые.

Рекурсивный обход. Не могу сделать табуляцию. Обход с выводом имен файлов
Задание простое, ну по крайней мере на первый взгляд. Написать скрипт обхода вложенных директорий с выводом дерева (табулированного, то...

Даны натуральные числа p и q. Получить все делители числа q, взаимнопростые с p
Входные данные записываются в файл input.txt, а выходные в output.txt. По окончании работы над задачей создается ехе-файл. Как переделать...

Даны натуральные числа p и q. Получить все делители числа q, взаимнопростые с p
как исправить, чтобы выводились только те делители, которые взаимнопросты с p? x=int(input('x=')) y=int(input('y=')) i=2 k=0 ...

кто поможет переделать 5 процедуру обход графа в глубину на обход графа в ширину
program kurs_work; uses crt,GraphABC; const n = 6; max = 1000; max_n = 36; var i, j, b : integer; Graf :...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru