Использование массивов позволяют упростить многие вычисления.
В частности все манипуляции, описанные в статье «Является ли число простым», можно заменить одной формулой.
Пусть в ячейке A1 находится число и нужно проверить простое ли оно. Достаточно в ячейку B1 ввести такую формулу:
=ЕСЛИ(МИН(ОСТАТ(A1;СТРОКА(ДВССЫЛ(«2:»&ОКРУГЛ(КОРЕНЬ(A1);)))))=0;»составное»;»простое»)
Можно пойти еще дальше и записать в ячейке C1 формулу:
=СУММ(—(ОСТАТ(A1;СТРОКА(ДВССЫЛ(«1:»&A1)))=0))
Эта формула покажет сколько у числа в ячейке A1 делителей.
Например, для числа 12 количество делителей будет 6, а именно 1, 2, 3, 4, 6 и само число 12.
Указанные формулы используют массивы, поэтому после окончания ввода нужно нажать CTRL+SHIFT+ENTER.
Похожие по тематике посты — еще почитать:
Пробовали ли вы когда-нибудь в Excel перечислить все простые числа между двумя заданными числами? В этой статье я расскажу о некоторых интересных методах решения этой задачи.
Генерация всех простых чисел между двумя заданными числами с помощью формул
Генерация всех простых чисел между двумя заданными числами с помощью функции, определяемой пользователем
Генерация всех простых чисел между двумя заданными числами с помощью формул
Потрясающе! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Сэкономьте 50% своего времени и сократите тысячи щелчков мышью каждый день!
Комбинируя функцию Define Name и формулы, вы можете перечислить или сгенерировать все простые числа между двумя конкретными числами. Пожалуйста, сделайте следующее:
1 . Создайте имя первого диапазона, нажав Формулы > Диспетчер имен и в диалоговом окне Диспетчер имен нажмите New , см. снимок экрана:
2 . В диалоговом окне Новое имя в текстовом поле Имя введите rng в качестве имени диапазона, а затем введите эту формулу: = ROW (INDIRECT (Sheet1! $ B $ 1 & “:” & Sheet1! $ B $ 2)) ( Sheet1 – это ваш текущий рабочий лист, который вы использовали, и являются начальным и конечным числами, которые вы указали) в текстовое поле Относится к , затем нажмите кнопку OK , чтобы вернуться к предыдущему диалоговому окну. См. Снимок экрана:
3 . Нажмите кнопку Создать , чтобы создать другое имя диапазона, в диалоговом окне Новое имя введите имя prime в текстовое поле Имя , а затем введите эту формулу: = SMALL (IF (MMULT (- (IF (rng> TRANSPOSE (rng-Sheet1! $ B $ 1 + 2) ), MOD (rng, (rng> TRANSPOSE (rng-Sheet1! $ B $ 1 + 2)) * TRANSPOSE (rng-Sheet1! $ B $ 1 + 2))) = 0), rng-Sheet1! $ B $ 1 + 2 ) = 0, rng), ROW (INDIRECT (“1:” & Sheet1! $ B $ 2))) ( rng – первое имя диапазона, которое вы создали на шаге 2), в текстовое поле Относится к , см. снимок экрана:
4 . Затем нажмите OK , закройте диалоговые окна и выберите один столбец, в котором вы хотите перечислить все простые числа, и введите следующую формулу: = ЕСЛИОШИБКА (простое число, “”) ( prime – это имя диапазона, созданное на шаге 3) в строку формул, а затем нажмите CTRL + SHIFT + Вместе с клавишами ENTER все простые числа между заданными двумя числами отображаются, как показано на следующем снимке экрана:
Создает все простые числа между двумя заданные числа с функцией, определяемой пользователем
Если первый метод несколько сложен, здесь вы можете применить функцию, определяемую пользователем , чтобы решить эту проблему.
1 . Удерживая нажатыми клавиши ALT + F11 , откройте окно Microsoft Visual Basic для приложений .
2 . Нажмите Вставить > Module и вставьте следующий код в окно Module .
Код VBA: генерировать все простые числа между двумя определенными числами:
3 . Затем сохраните и закройте этот код, вернитесь на рабочий лист, введите следующую формулу: = prime (10,100) ( 10 – это начальный номер, а – конечный номер, между которыми вы хотите получить простые числа, вы можете изменить их по своему усмотрению), а затем нажмите клавишу Enter , и все простые числа отобразятся в одной ячейке, см. снимок экрана:
Dear bear Пользователь Сообщений: 6 |
Здравствуйте! Как определить простое ли число или составное в эксель без VBA?! |
Bema Пользователь Сообщений: 6761 |
Добрый день. Вот такое соорудил, только на 1 выдает ошибку. Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл |
Пытливый Пользователь Сообщений: 4587 |
#3 27.12.2016 12:34:46 Можно как-то так формулой массива:
В В1 — исследуемое число. Изменено: Пытливый — 27.12.2016 12:37:12 Кому решение нужно — тот пример и рисует. |
||
mallanik Пользователь Сообщений: 1 |
#4 27.12.2016 12:51:24
Для этой формулы не нужен список чисел на листе от 1 до исследуемого числа. |
||
MCH Пользователь Сообщений: 3875 |
формула для больших чисел (больше 2^20): l |
vikttur Пользователь Сообщений: 47199 |
Формула массива: |
Казанский Пользователь Сообщений: 8839 |
#7 28.12.2016 00:46:05
По задумке, формула должна работать для чисел до 2^40, т.е. до 1,1*10^12.
|
||||
Казанский Пользователь Сообщений: 8839 |
#8 28.12.2016 01:27:46 Можно расширить диапазон работы формулы еще в 4 раза, примерно до 4,3*10^12, если не проверять четные числа. Формула массива
|
||
MCH Пользователь Сообщений: 3875 |
#9 28.12.2016 08:45:27 UDF, которая достаточно быстро раскладывает на простые множители пятнадцатизначные числа (опубликовано здесь )
Прикрепленные файлы
Изменено: MCH — 28.12.2016 08:57:51 |
||
olgats Пользователь Сообщений: 2 |
Bema, спасибо за пример, а если заменить =2 на <=2 это проблему с 1 не решит? |
Bema Пользователь Сообщений: 6761 |
Дополнительная проверка на еденицу решит проблему. Изменено: Bema — 28.12.2016 09:43:12 Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл |
olgats Пользователь Сообщений: 2 |
#12 28.12.2016 12:33:50 Bema, ну это как-то не изящно, надо добавлять 15 символов. Кстати 65536 можно увеличить до 1млн в новом экселе |
A number greater than 1 with no positive divisors besides 1 and the number itself is referred to as a prime number. In this article, we will be discussing two approaches for generating all prime numbers between two given numbers in excel. In the first approach, we are creating formulas for generating prime numbers between two numbers, and in the second approach, we are creating a new user-defined function that is simple and easy in comparison to the first approach.
Approach 1: Using Formulas
The Define Name function and formulas can be used to list or generate every prime number between two certain values.
Step 1: Follow, the below steps for creating the first range name
- Click on the Formulas tab
- Click on Name Manager
- Once we click on Name Manager, a new pop-up will be opened. Now, Click New Button.
Step 2: In the New Name popup window, Enter “range” as the range name in the “Name” text field. Now, Enter this formula:
=ROW(INDIRECT(Sheet1!$B$1&”:”&Sheet1!$B$2))
Sheet1 is the name of the worksheet we are now using, and B1 and B2 are the start and finish numbers we selected in the Refers to the text box.
Press the “OK” button and close the pop window.
Step 3: Now, Again click New Button for creating another range name. Enter “prime” as a name in Name Field in the New Name pop window. Enter this below formula in refers to the field.
=SMALL(IF(MMULT(–(IF(range>TRANSPOSE(range-Sheet1!$B$1+2),MOD(range,(range>TRANSPOSE(range-Sheet1!$B$1+2))*TRANSPOSE(range-Sheet1!$B$1+2)))=0), range-Sheet1!$B$1+2)=0,range),ROW(INDIRECT(“1:”&Sheet1!$B$2)))
range variable is created in step 2.
Click the “OK” button and close the pop window.
Step 4: Now, Write any two numbers or ranges (B1 and B2 Column) in which range we want to print or list prime numbers as start and end numbers. We need to select any column in which we want to list or print prime numbers and we need to enter this formula in the formula bar:
=IFERROR(prime,””)
prime is a function that is created in step 3. Once we entered the formula in the formula bar and then press CTRL + SHIFT + ENTER keys together, all prime numbers will be listed in the selected column between the mentioned range.
Approach 2: Using User-Defined Functions
The first method is a little bit difficult, so, in this approach, we will apply a user-defined function for generating a prime number between two numbers.
Step 1: Click the ALT + F11 keys together for opening the Microsoft Visual Basic for Applications window.
Step 2: First, Click on Insert Button and then click the Module button.
Step 3: Once we clicked on the Module button, a new dialog box will open. Just copy and paste this below code to open the dialog box.
Function PRIME(Start_val, End_val As Long)
‘Updateby Extendoffice 20160613
Dim val As String
For i = Start_val To End_val
For j = 2 To i – 1
If i Mod j = 0 Then GoTo 20:
Next j
val = val & i & “,”
20:
Next i
PRIME = val
End Function
Screenshot:
Step 4: Press CTRL + S to save this file and the dialog box will be closed, go back to our worksheet. Now, Select any cell and enter this below formula with two numbers as parameters such as =prime(10, 50) where 10 is starting number and 50 is the ending number. Press ENTER Key and prime numbers will be displayed to our selected cell.
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
A prime number is a number that is greater than 1 and has no positive divisor other than 1 and the number itself.
Approach:
To check whether the number is prime or not we have to divide the number with all the numbers between 2 and the square root of that number. And if it gives remainder 0 in any of the divisions it means that the number is a positive factor and ultimately results in a non-prime number. So if any of the divisions don’t result in the remainder 0 then it means that the number doesn’t have any positive factor and ultimately results in the Prime number.
- Take the number
- If the number is 2 then it is a Prime number else follow the next steps
- Derive the square root of the number
- Take the upper bound of the square root obtained and then minus it by one
- Divide the number with all the numbers between 2 and the square root of the number
- If the remainder is 0 in any of the divisions then non-prime.
- Else it is the prime number
Formula:
=IF(F6=2,"Prime",IF(AND(MOD(F6,ROW(OFFSET($C$2,,,ROUNDUP(SQRT(F6),0)-1)))<>0),"Prime","Not Prime"))
Let’s see each of these functions one by one so that it is clearly understood.
Step1: First of all check if the given number is 2 or not and if it is TRUE then print out that it is PRIME.
Step 2: If the number is not 2 then derive the square root of the given number.
Step 3: Round off the output of the square root and minus one from it ( we have to check from 2 to square root of a given number which is not included)
Step 4: Taking the range of numbers from the 2 to the one less than the square root of the given number.
Step 5: Taking one by one, the numbers from that range to evaluate further for the division.
Step-6: Dividing the given number from the number in the range of 2 to one less then square root of the given number and checking whether it is 0 or not. If it is 0 then the given number is NOT-PRIME and if it is not 0 then the given number is PRIME.
Output:
Like Article
Save Article