Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Тест на простоту числа - готов оплатить - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин  
Тест на простоту числа - готов оплатить
eugene407 Дата: Вторник, 17.12.2013, 13:29 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Нужно в EXCELL без использования макросов сделать тест на "простоту" числа в заданной ячейке (например C8).
Простое число - это то, которое имеет два делителя, т.е делится без остатка только на 1 и на само себя (малая теорема Ферма).
Если бы можно было с макросами, то было бы проще.
Нашел в интернете вариант записи, но разобраться в нем сам не могу.
Помоги плз - вопрос очень срочный - решить его надо максимум до 8-00МСК 18.12.2013
Запись найденная в интернете:
{=IF(OR(C8=2,C8=3),"prime",IF(AND((MOD(C8,ROW(INDIRECT("2:"&C8-1)))<>0)),"prime","not prime"))}
Кто сможет дать вариант решения проще - буду рад ему с объяснениями?
Или готов оплатить за подробное и доходчивое объяснение работы этого варианта?
 
Ответить
СообщениеНужно в EXCELL без использования макросов сделать тест на "простоту" числа в заданной ячейке (например C8).
Простое число - это то, которое имеет два делителя, т.е делится без остатка только на 1 и на само себя (малая теорема Ферма).
Если бы можно было с макросами, то было бы проще.
Нашел в интернете вариант записи, но разобраться в нем сам не могу.
Помоги плз - вопрос очень срочный - решить его надо максимум до 8-00МСК 18.12.2013
Запись найденная в интернете:
{=IF(OR(C8=2,C8=3),"prime",IF(AND((MOD(C8,ROW(INDIRECT("2:"&C8-1)))<>0)),"prime","not prime"))}
Кто сможет дать вариант решения проще - буду рад ему с объяснениями?
Или готов оплатить за подробное и доходчивое объяснение работы этого варианта?

Автор - eugene407
Дата добавления - 17.12.2013 в 13:29
китин Дата: Вторник, 17.12.2013, 14:01 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7030
Репутация: 1079 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Код
=IF(OR(C8=2;C8=3);"prime";IF(AND((MOD(C8;ROW(INDIRECT("2:"&C8-1)))<>0));"prime";"not prime"))


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал китин - Вторник, 17.12.2013, 14:04
 
Ответить
Сообщение
Код
=IF(OR(C8=2;C8=3);"prime";IF(AND((MOD(C8;ROW(INDIRECT("2:"&C8-1)))<>0));"prime";"not prime"))

Автор - китин
Дата добавления - 17.12.2013 в 14:01
eugene407 Дата: Вторник, 17.12.2013, 14:13 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
=ЕСЛИ(ИЛИ(C8=2;C8=3);"prime";ЕСЛИ(И((ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1)))<>0));"prime";"not prime"))


Локализация на русский - это понятно, вопрос в другом - подробное объяснение как это работает.
Готов подробно объяснить?
 
Ответить
Сообщение
=ЕСЛИ(ИЛИ(C8=2;C8=3);"prime";ЕСЛИ(И((ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1)))<>0));"prime";"not prime"))


Локализация на русский - это понятно, вопрос в другом - подробное объяснение как это работает.
Готов подробно объяснить?

Автор - eugene407
Дата добавления - 17.12.2013 в 14:13
китин Дата: Вторник, 17.12.2013, 14:37 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 7030
Репутация: 1079 ±
Замечаний: 0% ±

Excel 2007;2010;2016
попробую.
Код
СТРОКА(ДВССЫЛ("2:"&C8-1))
дает №№строк со 2 по число в ячейке С8-1.если число к примеру 10 то получится СТРОКА2 СТРОКА9.ОСТАТ.это остаток от деления числа в ячейке С8 на строку 2-9,то есть на наших баранах это остаток от деления 10 на 2,3,4,....9.и если этот остаток <>0,то число простое.а если хоть один остаток равен 0,то число не простое.как в случае с 10.10/2=5.остаток 0.ЛОЖЬ=>число не простое.
фу 7 потов сошло.надеюсь понятно объяснил
ЗЫ.господа асы Экселя если что не так,поправьте


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал китин - Вторник, 17.12.2013, 14:39
 
Ответить
Сообщениепопробую.
Код
СТРОКА(ДВССЫЛ("2:"&C8-1))
дает №№строк со 2 по число в ячейке С8-1.если число к примеру 10 то получится СТРОКА2 СТРОКА9.ОСТАТ.это остаток от деления числа в ячейке С8 на строку 2-9,то есть на наших баранах это остаток от деления 10 на 2,3,4,....9.и если этот остаток <>0,то число простое.а если хоть один остаток равен 0,то число не простое.как в случае с 10.10/2=5.остаток 0.ЛОЖЬ=>число не простое.
фу 7 потов сошло.надеюсь понятно объяснил
ЗЫ.господа асы Экселя если что не так,поправьте

Автор - китин
Дата добавления - 17.12.2013 в 14:37
_Boroda_ Дата: Вторник, 17.12.2013, 14:40 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16734
Репутация: 6534 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
"Просто́е число́ — это натуральное число, имеющее ровно два различных натуральных делителя: единицу и само себя" - Википедия
То есть, другими словами, остаток от деления этого числа (Х) на любое число, начиная с 2 и заканчивая Х-1 не должен быть равен нулю
а) ДВССЫЛ("2:"&C8-1) как раз дает нам массив из ячеек строк со 2-й по (Х-1)-ю
Правда, я бы написал ДВССЫЛ("A2:A"&C8-1) - немного больше букв, но зато массив получается только из ячеек столбца А строк со 2-й по (Х-1)-ю
б) СТРОКА(ДВССЫЛ("2:"&C8-1)) дает нам номера строк ячеек из п. а)
в) (ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1)))<>0 - делим наше число Х на полученное в п.б) и смотрим, равен ли полученный остаток нулю. Если не равен, то ИСТИНА, если не равен, то ЛОЖЬ. И так для каждого числа из п.б)
г) И(куча каких-то значений) - если хоть одно значение из кучи равно ЛОЖЬ, то вся И(куча каких-то значений) равна ЛОЖЬ. Т.е., если хоть одно значение из п.в) = ЛОЖЬ, то вся конструкция И(ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1))<>0)) равна ЛОЖЬ, иначе - конструкция равна ИСТИНА
д) ЕСЛИ(И(ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1)))<>0);"prime";"not prime") - это, я уверен, Вам и без меня понятно. Если в п.г) ЛОЖЬ, то есть, мы нашли какое-то число, на которое без остатка делится наше Х, то, следовательно, Х - не простое число. Если не нашли такого делителя, то простое.
е) Исключения составляют только число 2 - оно простое по определению
Поэтому, просто переписываем формулу так:
Код
=ЕСЛИ(C8=2;"prime";ЕСЛИ(И(ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1)))<>0);"prime";"not prime"))

Кстати, массивный ввод (это фигурные скобочки у Вас в формуле) теперь не нужен.
А вот это я зря написал. Нужен.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Вторник, 17.12.2013, 18:50
 
Ответить
Сообщение"Просто́е число́ — это натуральное число, имеющее ровно два различных натуральных делителя: единицу и само себя" - Википедия
То есть, другими словами, остаток от деления этого числа (Х) на любое число, начиная с 2 и заканчивая Х-1 не должен быть равен нулю
а) ДВССЫЛ("2:"&C8-1) как раз дает нам массив из ячеек строк со 2-й по (Х-1)-ю
Правда, я бы написал ДВССЫЛ("A2:A"&C8-1) - немного больше букв, но зато массив получается только из ячеек столбца А строк со 2-й по (Х-1)-ю
б) СТРОКА(ДВССЫЛ("2:"&C8-1)) дает нам номера строк ячеек из п. а)
в) (ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1)))<>0 - делим наше число Х на полученное в п.б) и смотрим, равен ли полученный остаток нулю. Если не равен, то ИСТИНА, если не равен, то ЛОЖЬ. И так для каждого числа из п.б)
г) И(куча каких-то значений) - если хоть одно значение из кучи равно ЛОЖЬ, то вся И(куча каких-то значений) равна ЛОЖЬ. Т.е., если хоть одно значение из п.в) = ЛОЖЬ, то вся конструкция И(ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1))<>0)) равна ЛОЖЬ, иначе - конструкция равна ИСТИНА
д) ЕСЛИ(И(ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1)))<>0);"prime";"not prime") - это, я уверен, Вам и без меня понятно. Если в п.г) ЛОЖЬ, то есть, мы нашли какое-то число, на которое без остатка делится наше Х, то, следовательно, Х - не простое число. Если не нашли такого делителя, то простое.
е) Исключения составляют только число 2 - оно простое по определению
Поэтому, просто переписываем формулу так:
Код
=ЕСЛИ(C8=2;"prime";ЕСЛИ(И(ОСТАТ(C8;СТРОКА(ДВССЫЛ("2:"&C8-1)))<>0);"prime";"not prime"))

Кстати, массивный ввод (это фигурные скобочки у Вас в формуле) теперь не нужен.
А вот это я зря написал. Нужен.

Автор - _Boroda_
Дата добавления - 17.12.2013 в 14:40
eugene407 Дата: Среда, 18.12.2013, 16:21 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, Спасибо за помощь!
 
Ответить
Сообщение_Boroda_, Спасибо за помощь!

Автор - eugene407
Дата добавления - 18.12.2013 в 16:21
MCH Дата: Среда, 18.12.2013, 18:16 | Сообщение № 7
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Для ускорения расчетов и увеличения диапазона проверяемых чисел, формулу можно записать так:
Код
=ЕСЛИ(C8<4;"prime";ЕСЛИ(И(ОСТАТ(C8;СТРОКА(A$2:ИНДЕКС(A:A;C8^0,5))));"prime";"not prime"))

(нет необходимости проверять все числа до С8-1, достаточно проверять до корня)


Сообщение отредактировал MCH - Среда, 18.12.2013, 18:17
 
Ответить
СообщениеДля ускорения расчетов и увеличения диапазона проверяемых чисел, формулу можно записать так:
Код
=ЕСЛИ(C8<4;"prime";ЕСЛИ(И(ОСТАТ(C8;СТРОКА(A$2:ИНДЕКС(A:A;C8^0,5))));"prime";"not prime"))

(нет необходимости проверять все числа до С8-1, достаточно проверять до корня)

Автор - MCH
Дата добавления - 18.12.2013 в 18:16
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!