Поддерживаемые операционные системы: Linix, Windows, Android, Mac, IOS, FreeBSD, DragonflyBSD, OpenBSD, NetBSD, Plan9, AIX, Solaris, Illumos
yafu -h
-file string
за этим углом прячется путь к файлу с кандидатами
17289959931316644499265248332609966493573541975672767439894566993300304735621790170252230794443332365307
15724605919818413182578842991469503360630569170503626004600952390767973558300719134340888021850710594347
899173337391997439
1298074214633706835075030044377087
1794246734005973984246794873619
1147797409030816541552
Необходимо создать программу на языке Go, которая проверяет, являются ли числа из текстового файла простыми. Файл содержит одно число в каждой строке. Путь к файлу задается через аргументы командной строки.
- Чтение файла:
- Программа должна принимать путь к файлу как аргумент командной строки.
- Программа должна считывать каждое число из файла, который содержит одно число на каждой строке.
- Проверка на простоту:
- Программа должна проверять каждое число на простоту двумя способами: a. С использованием одного теста Миллера-Рабина. b. С использованием 50 тестов Миллера-Рабина для большей точности.
- Используйте библиотеку
math/big
для работы с числами и проверки на простоту.
- Многопоточность:
- Программа должна использовать горутины для параллельной обработки чисел.
- Количество рабочих горутин должно быть равно количеству ядер CPU.
- Используйте
sync.WaitGroup
для синхронизации горутин. - Реализуйте механизм для передачи чисел рабочим горутинам и получения результатов.
- Вывод результатов:
- Для каждого числа программа должна выводить следующую информацию: a. ID рабочей горутины, которая обработала число. b. Число. c. Результат первой проверки на простоту. d. Результат второй проверки на простоту. e. Время, затраченное на обработку числа.
- Результаты должны выводиться в консоль.
- Обработка ошибок:
- Программа должна корректно обрабатывать ошибки, такие как неправильный путь к файлу или проблемы с чтением файла.
- Дополнительные библиотеки:
- Если необходимо, можно использовать дополнительные библиотеки для разбора аргументов командной строки или для других вспомогательных функций.
Worker 1: 1234567890123456789: isMaybePrime: false, isPrime: false, Duration: 12345 ns
Worker 2: 9876543210987654321: isMaybePrime: true, isPrime: false, Duration: 67890 ns
...
- Старайтесь делать код чистым и читаемым, следуя принципам хорошего стиля кодирования на Go.
- Добавьте комментарии к ключевым частям кода.
- Убедитесь, что программа корректно компилируется и работает.