18.06.2014, 22:02 | #1 (permalink) |
Member
Регистрация: 06.12.2013
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
В чём ошибка? Подскажите, пожалуйста
Код:
var factorial: Uint64; n, z, i: integer; begin write('n = '); readln(n); writeln('считаем факториал числа n-1'); factorial := 1; for i := 2 to n - 1 do factorial := factorial * i; writeln('(n-1)! = ', factorial); begin writeln('проверяем:'); z := factorial + 1; if z mod n = 0 then writeln('остаток = 0 => n - простое число') else begin writeln('остаток ≠0 => n - составное число'); end; end; end. |
18.06.2014, 22:02 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Пожалуйста, поищите в этих постах решение своей проблемы Подскажите пожалуйста по Visaton Подскажите пожалуйста, что это за микросхема? Подскажите пожалуйста! Паскаль. Подскажите в чем ошибка ? Подскажите, пожалуйста, стоит ли... Подскажите, пожалуйста, что за штучка? |
18.06.2014, 23:02 | #2 (permalink) |
Member
Регистрация: 06.12.2013
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
пернёс z в тип Uint64, добился того, что работает до 19. судя по всему проблема в типах. может у вас есть мысли на счёт того как сделать, чтобы хотя бы до 43 работала.
|
19.06.2014, 12:01 | #3 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
var factorial: QWord; n, i: integer; begin Repeat write('n (0 to exit) = '); readln(n); if n>0 then begin factorial := 1; for i := 2 to n - 1 do factorial := factorial * i; writeln('(n-1)! = ', factorial); writeln('testing:'); if ((factorial+1) mod n)=0 then writeln('n is prime') else writeln('n is composite'); end; Until n=0; end. |
|
19.06.2014, 13:56 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну вот так, мало-мало встав на уши, удалось продвинуться до n=25:
Код:
var z,p,m:QWord; n,i:integer; begin Repeat write('n (0 to exit) = '); readln(n); if n>0 then begin z:=1; i:=1; p:=1; repeat inc(i); z:=z*i; if (z mod 10)=0 then begin z:=z div 10; p:=p*10; end; until i=n-1; m:=((z mod n)*p) mod n; writeln('testing:'); if m=n-1 then writeln('n is prime') else writeln('n is composite'); end; Until n=0; end. 1. Если P+1 делится нацело без остатка на Q, то остаток от деления P на Q есть Q-1. 2. Пусть a,b,c,d,e - цифры. Пусть исследуемое число заканчивается k нулями, т.е., для примера, при k=4 запись числа имеет вид abcde0000. Оно, естественно, равно abcde*10000. Так вот, остаток от деления нашего числа на n можно вычислить так: а) определяем остаток от деления abcde на n. б) этот остаток умножаем на 10^k, т.е. в нашем примере на 10000. в) находим остаток от деления полученного произведения на n - он и будет искомым ответом. |
19.06.2014, 22:48 | #5 (permalink) |
Member
Регистрация: 06.12.2013
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
интересный метод , спасибо, Vladimir_S )
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|