Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
"Ламер"-программер:)
5 / 5 / 0
Регистрация: 17.04.2009
Сообщений: 69
1

Работа с большими числами

04.06.2009, 19:15. Просмотров 2229. Ответов 9
Метки нет (Все метки)

Доброго времени суток, уважаемые форумчане!
Собственно задание которое я сделал совсем не сложное, и вроде даже рабочее.
Собственно задание: проверить утверждение, что результатами вычислений по формуле (х^2 + х + 17)/x при 0 < х < 32767 являются простые числа.
Собственно вот код решения:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub npoB()
Dim k, x, y(1 To 32766), v As String
k = 0
MsgBox "Вас причетствует программа для проверки утверждения, что результатами вычислений по формуле (х^2 + х + 17)/x при 0 < х < 32767 являются простые числа"
For i = 1 To 32766
    y(i) = (i * i + i + 17) / i
    v = v & y(i) & ";  "
Next
For i = 1 To 32766
    If y(i) / y(i) = 1 Then
        k = k + 1
    End If
Next
If k = 32766 Then
    MsgBox "Результатами вычислений по формуле (х^2 + х + 17)/x при 0 < х < 32766 являются простые числа" & Chr(13) & "Результат вычисления" & Chr(13) & v
Else
    MsgBox "Утверждение не верно"
End If
End Sub
А теперь внимание, вопрос : как работать с утверждением, если поменять конечное значение х на 2147483647, т.е. лонговое число. Выше написанный код для решения данной задачи не подходит, ибо пишет о переполнении памяти ещё на стадии определения массива =) У меня были мысли насчёт работы с переменными типа стринг, но толком мыслей как считать, такое, не появилось. Если кто нибудь подкинет идейку, буду очень благодарен.
А вообще задание необычайно сложное, по мне, ибо если работать как я предложил, то и самые малые величины придётся интерпритировать как стринговые и считать непонятно как

ЗЫ: Переменная v не содержит все 32766 элементов массива, т.к. переменная может запомнить лишь 1024 символа, если я не ошибаюсь =) Если есть у кого идея или кто знает встроенную функцию какую нибудь, для вывода "кучи" значений символов, буду признателен =)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2009, 19:15
Ответы с готовыми решениями:

Работа с большими числами в VBA
Доброго времени дня. Я делаю небольшую программку для мониторинга транзакций с Эфира. Проблема в...

Макрос шифрования RSA на VBA глючит с большими числами
Сделал макрос генерация ключей, функцию дешифрования и шифрования RSA, находится проект на этапе...

Работа с большими файлами Excel
Доброго времени суток. Имеется большой файл, сохранённый в &quot;.xlsb&quot;, его размер 30Мб (вроде бы не...

Работа с числами в Excel.
Здравствуйте! Помогите, пожалуйста, написать макрос. В исходном файле есть два столбца (один...

Работа с числами под главной диагональю
Снова здравствуйте! помогите, если не трудно, с заданием на 2мерные массивы. Условие: Вычислить...

9
БурундукЪ
9567 / 2586 / 83
Регистрация: 17.02.2009
Сообщений: 10,364
04.06.2009, 20:02 2
http://algolist.manual.ru/maths/longnum.php
здесь есть статья, единственная проблема примеры приведены в С++, но алгоритм тот же
1
"Ламер"-программер:)
5 / 5 / 0
Регистрация: 17.04.2009
Сообщений: 69
04.06.2009, 20:39  [ТС] 3
Как говорил один мой препод:"как по мне так какая разница какой язык?"
Принципы везде одни и те же =)
Большое спасибо, буду разбирать, и разбираться!

Не по теме:

Даже и не знаю что бы я "объяснял" гуглю если бы мне ссылку не дали, спасибо тебе, Бурундук!

0
Abu
1155 / 281 / 22
Регистрация: 28.09.2008
Сообщений: 553
04.06.2009, 21:44 4
Стоп! Стоп! Стоп!
"Ламер"-программер:), зачем тебе и массив под результаты и строка под них же?
Visual Basic
1
2
3
    If y(i) / y(i) = 1 Then
        k = k + 1
    End If
Этот блок что делает?
Я так понимаю нужно последовательно проверять, является результат простым или нет, только и всего. Для этого идеально подойдёт пользовательская функция типа Boolean, которая будет возвращать True, если число является простым и False в обратном. В общем я это примерно так вижу.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Function simpValBool(testValue As Long) As Boolean
Dim i As Integer
For i = 2 To testValue - 1
    If testValue Mod i = 0 Then
        simpValBool = False
        Exit Function
    End If
Next i
simpValBool = True
End Function
Private Sub npoB()
Dim x As Integer, res As Long
For x = 1 To 32766
    res = (x ^ 2 + x + 17) / x
    MsgBox "Результат=" & res & vbCrLf & "это число простое=" & simpValBool(res)
Next x
End Sub
1
04.06.2009, 21:44
Toxa33rus
3882 / 881 / 122
Регистрация: 16.04.2009
Сообщений: 1,791
04.06.2009, 22:20 5
Цитата Сообщение от "Ламер"-программер:) Посмотреть сообщение
результатами вычислений по формуле (х^2 + х + 17)/x при 0 < х < 32767 являются простые числа
А это что действительно так? подставил 10 и в результате получил 12,7. Я понимаю что число не очень сложное, но и не простое
0
Abu
1155 / 281 / 22
Регистрация: 28.09.2008
Сообщений: 553
04.06.2009, 22:26 6
Цитата Сообщение от Toxa33rus Посмотреть сообщение
А это что действительно так?
Конечно нет, начало последовательности простых чисел перечислено в википедии. Да и вообще, простым может быть только натуральное число, а натуральное (если я ничё не путаю) - это целое число.
0
"Ламер"-программер:)
5 / 5 / 0
Регистрация: 17.04.2009
Сообщений: 69
04.06.2009, 22:31  [ТС] 7
Abu, извините, немного недопонимаю вашего варианта, но если я не ошибаюсь то пользователю придётся нажать на клавишу интер 32766 раз. Нет?
Если что не так понял, то извините =)
А вообще спасибо за отзыв
0
Abu
1155 / 281 / 22
Регистрация: 28.09.2008
Сообщений: 553
04.06.2009, 22:48 8
Ну в общем да, это для показухи. Но ведь это можно и убрать. Или можно сделать с вопросом, типа число такое-то, осталось ещё стока-то, показывать дальше? Ну а дальше по выбору пользователя. Нажмёт да, цикл дальше пойдёт, нажмёт нет - остановится. Если этот вариант не устраивает, а выводить всё равно надо куда-то, то замени MsgBox на Cells(x,1) (примерно как-то так), и тада вывод будет на лист в книге. Но очень и очень долгий. Без вывода этот вариант считает несколько секунд, но с выводом естественно процесс притормаживается, может даже повиснуть. А вообще сюда пожалуй нужен какой-нибудь другой алгоритм проверки числа на "простоту", этот слишком долгий. Просто я если честно другого не знаю, в математике не сильна. Но точно знаю, что он есть.
1
"Ламер"-программер:)
5 / 5 / 0
Регистрация: 17.04.2009
Сообщений: 69
04.06.2009, 23:13  [ТС] 9
Хм, спасибо, так и сделаю Вставить Do While какой-нибудь и всё будет путём
Благодарю за помощь!

Добавлено через 13 минут 23 секунды
Ой, а хотелось бы ещё узнать вот что:
Visual Basic
1
For i = 2 To testValue - 1
а почему берётся цикл от 2 и до "число" -1

Добавлено через 7 минут 4 секунды
ой, всё разобрал, объяснять ненжуно =)
0
БурундукЪ
9567 / 2586 / 83
Регистрация: 17.02.2009
Сообщений: 10,364
04.06.2009, 23:15 10
Цитата Сообщение от "Ламер"-программер:) Посмотреть сообщение
а почему берётся цикл от 2 и до "число" -1
потому что остаток деления числа самого на себя всегда 0

Не по теме:

эт даже Бурундуки знают )))


аналогично, поэтому же от 2 считается, а не от 1
0
04.06.2009, 23:15
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2009, 23:15

Работа с большими числами
Написала программу, с маленькими числами работает. Подскажите, пожалуйста, как сделать, чтобы с...

Работа с большими числами
Подскажиье, пожалуйста, как работать с большими числами. Допустим у меня есть число...

Работа с большими числами
Писал-с! Чертовски интересная задача. Делать надо всё с нуля. Но ведь и овчинка выделки...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.