Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 04.12.2008, 18:30   #1
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Кому простые числа даром?

Option Compare Text
Option Explicit
Sub PrimeTime()
'печать простых чисел, равных или меньших, чем N
'[выход: <Ctrl>+<Break>, но в Excel лучше не надо!]
DoEvents

Const N As Variant = 10101 '''''''''''Сюда вводим N.
Dim spacer As String 'разделитель (при печати)
Dim i, T 'делитель i и делимое T (кандидат в простые)
Dim proportion, radical
Dim d0 As Date, t0 As Date, t01 As Single 'Переменные
Dim d1 As Date, t1 As Date, t02 As Single 'для хронометража.

SendKeys "^{home}", True 'В начало документа (раб. листа).

'Проверка, что введённое N - число.
If Not IsNumeric(N) Then _
MsgBox "Alas, N isn’t numeric!": Exit Sub

If InStr(Application, "Excel") Then
If N > 821651 Then MsgBox "N is too big. Bye!": Exit Sub
If N > 40 Then spacer = "{enter}" Else spacer = "{tab}"
ElseIf InStr(Application, "Word") Then
spacer = "{tab}"
Else: spacer = "{tab}"
End If

T = CDec(Fix(N))
If T < 0 Then T = -T

MsgBox "N = " & T
radical = Sqr(T) 'Вычисление квадратного корня.
MsgBox "square radical(" & T & ") " & _
IIf(radical = Fix(radical), "= ", "~ ") & radical

If Right(Str(Fix(T)), 1) Like "[02468]" Then T = Fix(T) - 1
'сделали верхнюю грань нечётной (что результата не меняет)

If T < 2 Then MsgBox "Простых чисел не нашлось.": Exit Sub
If T = 2 Then SendKeys "{2}^{home}", True: Exit Sub
If T = 3 Then SendKeys "{3}{tab}{2}^{home}", True: Exit Sub
If T = 5 Then SendKeys "{5}{tab}{3}{tab}{2}^{home}", True: Exit Sub
If T > 17 Then MsgBox "Expecting quantity of primes: " & vbTab & _
Fix(T / (Log(T) - 1.08366)) - 2 '(A. M. Legendre. Paris, 1808)

d0 = Date: t0 = Time: t01 = Timer 'Отсчет времени.

i = CDec(Fix(radical))
If Right(Str(i), 1) Like "[02468]" Then i = i + 1
'сделали делитель нечётным

Do
proportion = T / i
If proportion = Fix(proportion) Then
Select Case i
Case 1 'а значит, делителей, кроме "1", не встретилось
SendKeys T & spacer, True 'печатается простое число...
'...и (если надо) - составное число, с 2-мя множителями
'Case Else
'SendKeys "{tab}" & T & " = " & i & "·" & T / i & "{enter}", True
End Select

T = T - 2
If Right(Str(T), 1) = "5" Then T = T - 2

If T = 3 Then SendKeys "{5}{Tab}{3}{Tab}{2}", True: Exit Do
radical = Sqr(T)
i = CDec(Fix(radical)) + 2
If Right(Str(i), 1) Like "[02468]" Then i = i + 1
If Right(Str(i), 1) = "7" Then i = i - 2
'сделали новое i (для нового «кандидата» T) оканчивающимся на нечётное
End If
i = i - 2
Loop

SendKeys "^{home}", True 'Возврат в начало документа/рабочего листа.

'Вывод сообщений о времени выполнения (если оно больше 0,1 с).
CHRONOS:
d1 = Date: t1 = Time: t02 = Timer

If Abs(t02 - t01) > 0.1 Then
MsgBox "Start:" & vbTab & "date = " & Format(d0, "yyyy-mm-dd") & _
vbLf & _
vbTab & "time = " & Format(t0, "H:nn:ss") & vbLf & vbLf & _
"Ready:" & vbTab & "date = " & Format(d1, "yyyy-mm-dd") & _
vbLf & _
vbTab & "time = " & Format(t1, "H:nn:ss") & vbLf & vbLf & _
"Total (by date):" & vbTab & DateDiff("s", t0, t1) & _
" second(s)" & _
vbLf & _
"Total (by time):" & vbTab & _
IIf(t02 >= t01, FormatNumber(t02 - t01, 2), _
FormatNumber(t02 + 86400 - t01, 2)) & " second(s)" & vbLf & _
vbTab & "(if totally less then 1 day)"
End If
End Sub

Последний раз редактировалось Sasha_Smirnov; 05.12.2008 в 14:09. Причина: замена "{enter}" на "{tab}" (в «закомментированном» операторе SendKeys) + попытка уменьшить шрифт в окне.
Sasha_Smirnov вне форума
Старый 04.12.2008, 18:50   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Чтобы программа выполнялась, необходимо назначить ей кнопку (или комбинацию клавиш) в Word или Excel.

В среде разработки — печатать не будет (если не Word 97).
Sasha_Smirnov вне форума
Старый 14.12.2008, 19:02   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию А вот поток вывода (полученный за 40 тыс. секунд при 1,7 МГц)

1,7 МГц, разумеется, частота цикла Do...Loop, а проц у меня 2280 МГц:-)

111111111111110423 = 40768027·2725447349
111111111111110419 = 383·290107339715693
111111111111110417 = 42719·2600976406543
111111111111110413
111111111111110411 = 302069611·367832801
111111111111110407 = 322067141·344993627
111111111111110401
111111111111110399
111111111111110393 = 55042591·2018638823
111111111111110389 = 67667417·1642017917
111111111111110387 = 60692663·1830717349
111111111111110383 = 170277407·652529969
111111111111110381
111111111111110377 = 353·314762354422409
111111111111110371 = 72683587·1528696033
111111111111110369 = 358547·309892736827
111111111111110363 = 1190827·93305837969
111111111111110359 = 19244431·5773676089
111111111111110357 = 2926937·37961565661
111111111111110353 = 3142339·35359364827
111111111111110351 = 2290051·48519055301
111111111111110347 = 33192277·3347498911
111111111111110341 = 10516429·10565479129
111111111111110339 = 5295617·20981712067
111111111111110333 = 2833·39220300427501
111111111111110329 = 53693597·2069354957
111111111111110327 = 86901829·1278581963
111111111111110323 = 3670087·30274789429
111111111111110321 = 45737·2429348473033
111111111111110317 = 47·2364066193853411
111111111111110311 = 698083·159166046317
111111111111110309 = 13393·8296207803413
111111111111110303 = 41·2710027100270983
111111111111110299 = 69496567·1598799997
111111111111110297 = 29711·3739729767127
111111111111110293 = 173707021·639646633
111111111111110291 = 30557·3636191743663
111111111111110287 = 18383·6044231687489
111111111111110281
111111111111110279 = 37739·2944198603861
111111111111110273 = 198557·559593019189
111111111111110269 = 52629959·2111176091
111111111111110267 = 12869·8634012830143
111111111111110263 = 368839·301245560017
111111111111110261 = 4794131·23176486231
111111111111110257 = 158963869·698970853
111111111111110251 = 8887·12502656814573
111111111111110249 = 5233·21232774911353
111111111111110243 = 265620229·418308167
111111111111110239 = 1414163·78570229253
111111111111110237 = 361·307787011388117
111111111111110233 = 294206287·377663959
111111111111110231 = 324252137·342668863
111111111111110227 = 13·8547008547008479
111111111111110221 = 119674367·928445363
111111111111110219 = 139·799360511590721
111111111111110213
111111111111110209 = 12156199·9140283991
111111111111110207 = 5419853·20500761019
111111111111110203 = 156127·711671338789
111111111111110201 = 9477013·11724275477
111111111111110197 = 74917477·1483113361
111111111111110191 = 215941867·514541773
111111111111110189 = 70995973·1565033993
111111111111110183 = 13171799·8435530417
111111111111110179 = 123998417·896068787
111111111111110177 = 71261·1559213470357
111111111111110173 = 5579·19915954671287
111111111111110171 = 40293719·2757529309
111111111111110167
111111111111110161 = 179551577·618825593
111111111111110159 = 233874467·475088677
111111111111110153
111111111111110149 = 4941313·22486151173
111111111111110147 = 163·681663258350369
111111111111110143 = 2951113·37650578311
111111111111110141 = 137·811030008110293
111111111111110137 = 432893·256671073709
111111111111110131 = 3451·32196786760681
111111111111110129 = 86226029·1288602901
111111111111110123 = 1426919·77867847517
111111111111110119 = 11131·9982131983749
111111111111110117 = 34695031·3202507907
111111111111110113 = 367·302755071147439
111111111111110111 = 884291·125649940021
111111111111110107 = 131·848176420695497
111111111111110101 = 31·3584229390680971
111111111111110099 = 11·10101010101010009
111111111111110093 = 989·112346927311537

(простые — выделены)

Время на расчёт каждой строки — от 14 (между "близнецами") до 515 с.
Примечание: N, кратные 2, 3 и пяти, программа пропускает.

Последний раз редактировалось Sasha_Smirnov; 14.12.2008 в 21:36. Причина: выделение «близнецов»; примечание.
Sasha_Smirnov вне форума
Старый 14.12.2008, 19:52   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

А точнее, за 77+40 тыс. секунд (т. е. за 32,5 ч).

111111111111111011
111111111111111007 = 58253•1907388651419
111111111111111001 = 319•348310693138279
111111111111110999 = 214695451•517528949
111111111111110993
111111111111110989 = 12026117•9239151017
111111111111110987 = 5258563•21129557849
111111111111110983 = 269560631•412193393
111111111111110981 = 113468657•979222933
111111111111110977 = 157•707714083510261
111111111111110971 = 320419397•346767743
111111111111110969 = 131203439•846861271
111111111111110963 = 166263337•668283899
111111111111110959 = 184640917•601768627
111111111111110957 = 77•1443001443001441
111111111111110953 = 58151953•1910703001
111111111111110951
111111111111110947 = 502877•220950870911
111111111111110941
111111111111110939 = 34127•3255812439157
111111111111110933 = 251864699•441153967
111111111111110929 = 4459•24918392265331
111111111111110927 = 34964353•3177839759
111111111111110923 = 50952037•2180700079
111111111111110921 = 136045529•816720049
111111111111110917 = 2239•49625328767803
111111111111110911 = 33613•3305599354747
111111111111110909 = 13546157•8202408337
111111111111110903 = 13•8547008547008531
111111111111110899 = 91037•1220504971727
111111111111110897 = 96727049•1148707753
111111111111110893 = 124843•890006737351
111111111111110891 = 448789•247579845119
111111111111110887 = 1603•69314479794829
111111111111110881 = 3431•32384468408951
111111111111110879 = 17•6535947712418287
111111111111110873 = 40796399•2723551927
111111111111110869 = 318769•348563100901
111111111111110867 = 196891711•564325997
111111111111110863 = 9808033•11328582511
111111111111110861 = 569•195274360476469
111111111111110857 = 9833•11299818072929
111111111111110851 = 13•8547008547008527
111111111111110849 = 54840293•2026085293
111111111111110843 = 19052329•5831891267
111111111111110839 = 26965999•4120415161
111111111111110837 = 52138693•2131068209
111111111111110833 = 347•320204931155939
111111111111110831 = 65461109•1697360659
111111111111110827 = 2802647•39645060941
111111111111110819
111111111111110813 = 320851•346301277263
111111111111110809
111111111111110807 = 105209669•1056092203
111111111111110803 = 77•1443001443001439
111111111111110801
111111111111110797 = 818201•135799285397
111111111111110791 = 1265993•87765975887
111111111111110789 = 1709519•64995540331
111111111111110783 = 700879•158531088977
111111111111110779 = 431•257798401649909
111111111111110777 = 535517•207483816781
<далее здесь шли составные числа, пришлось убрать>
111111111111110707
111111111111110701 = 46266481•2401546621
111111111111110699 = 19129193•5808457843
111111111111110693 = 874247•127093500019
<здесь шли составные числа>
111111111111110681
<здесь шли составные числа — сократил>
111111111111110657
<здесь шли составные числа — сократил>
111111111111110639
111111111111110633 = 92580869•1200151957
111111111111110629
<здесь шли составные числа — сократил>
111111111111110611
111111111111110609 = 43•2583979328165363
111111111111110603 = 73344413•1514922631
111111111111110599 = 154217951•720481049
111111111111110597 = 28241•3934390110517
111111111111110593 = 259•429000429000427
111111111111110591 = 13•8547008547008507
111111111111110587 = 190427•583484018081
111111111111110581 = 67•1658374792703143
111111111111110579 = 133•835421888053463
111111111111110573 = 206081779•539160287
111111111111110569 = 199•558347292015631
111111111111110567 = 7723•14387040154229
111111111111110563 = 305908453•363216871
111111111111110561 = 51007•2178350248223
111111111111110557 = 3491197•31826078881
111111111111110551 = 111111119•999999929
111111111111110549 = 177747259•625107311
111111111111110543 = 2899999•38314189457
111111111111110539 = 182036153•610379363
111111111111110537 = 276583871•401726647
111111111111110533 = 3144373•35336491921
111111111111110531 = 29977457•3706488883
111111111111110527 = 254286931•436951717
111111111111110521 = 19948421•5569920101
111111111111110519 = 248298233•447490543
111111111111110513 = 13•8547008547008501
111111111111110509 = 2852521•38951899429
111111111111110507 = 1817•61150859169571
111111111111110503 = 51635027•2151855389
111111111111110501 = 1127993•98503369357
111111111111110497 = 284522281•390518137
111111111111110491
111111111111110489
<здесь шли составные числа — сократил>
111111111111110431
<здесь отключал питание, затем продолжил — см. предыд. пост>

Последний раз редактировалось Sasha_Smirnov; 14.12.2008 в 21:29.
Sasha_Smirnov вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простые числа Verochka Помощь студентам 14 02.12.2008 20:30
Простые числа werser Помощь студентам 8 18.06.2008 07:24
Delphi и простые числа razoom Фриланс 6 13.02.2008 14:09
простые числа Акашаев Нурлан Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2007 12:23