Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

В чем ошибка?   Найти похожие ветки 

 
Chuha   (2004-01-25 19:41) [0]

В чем ошибка? Даны три числа N,M,Y(0<n<999,0<m<999,0<y<99)

Нужно найти все числа из диапазона 0..M-1, таких которые выполняют условие: X^N MOD m = y

var m,n,y,t,i,k,count:integer;
x:longint;
a:array[1..999]of longint;
begin
count:=0;
readln(n,m,y);
for i:=0 to m-1 do
begin
x:=1;
for k:=1 to n do
begin
x:=x*i;
end;
t:=x mod m;
if t= y then
begin
inc(count);
a[count]:=i;
end;
end;
if count<>0 then
begin
for i:=1 to count do
begin
Write(a[i]);
if i<>count then write(" ");
end;
end
else
begin
Writeln("-1");
end;
end.
Вроде правильно! ?? Если что вот уловие : http://acm.timus.ru/problem.aspx?space=1&num=1110


 
Palladin ©   (2004-01-25 19:46) [1]

ты вышел за ограничение памяти... и скорее всего за ограничение времени...

основной цикл
bPresent:=false;
for i:=0 to m-1 do
if trunc(exp(ln(i)*n)) mod m=y then
begin
writeln(i);
bPresent:=true;
end;
if not bPresent then writeln("-1");


 
Chuha   (2004-01-25 20:01) [2]

Все равно возникает ошибка:FLT_INVALID_OPERATION


 
Palladin ©   (2004-01-25 20:06) [3]

правильно :) ln нуля не сущестувует...
проверяй отдельно при случае x=0 вне цикла...
и for i:=1 to...


 
Chuha   (2004-01-25 20:40) [4]

Я исключил ноль, но все равно возникает ошибка. При прохождении 3го теста. Изи-за чего это может быть? (Спасибо за помощь :) )


 
jack128 ©   (2004-01-25 21:00) [5]

program Project1;
{$APPTYPE CONSOLE}
//Изьято из Math;
function IntPower(Base: Extended; Exponent: Integer): Extended;
asm
mov ecx, eax
cdq
fld1 { Result := 1 }
xor eax, edx
sub eax, edx { eax := Abs(Exponent) }
jz @@3
fld Base
jmp @@2
@@1: fmul ST, ST { X := Base * Base }
@@2: shr eax,1
jnc @@1
fmul ST(1),ST { Result := Result * X }
jnz @@1
fstp st { pop X from FPU stack }
cmp ecx, 0
jge @@3
fld1
fdivrp { Result := 1 / Result }
@@3:
fwait
end;
var
N, M, Y: Word;
x : Word;
begin
Write("N = ? ");
ReadLn(N);
Write("M = ? ");
ReadLn(M);
Write("Y = ? ");
ReadLn(Y);
for x := 1 to M - 1 do
if (Trunc(IntPower(X, N)) mod M) = Y then
Write(X, " ");
ReadLn;
end.


 
Goida ©   (2004-01-25 23:55) [6]

Попробуй использовать вот этот алгоритм:
число х в степени р по модулю n равно... и дальше ты сравниваешь.
Может, конечно, вариант с асмом лучше? Не смотрел его - не знаю.
function ExpMod(x,p,n: int64): int64;
var
Res: int64;
begin
if p = 0
then begin
Result := 1;
exit
end;
if (p mod 2) = 0
then begin
Res := expmod(x, p div 2, n);
Result := (Res*Res) mod n;
exit
end;
Result := (x*expmod(x, p-1, n)) mod n;
end;


 
Легионер   (2004-01-26 09:48) [7]

На Паскале же так не получится сделать? Или как?



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
14-16625
Думкин
2004-01-14 06:14
2004.02.06
С днем рождения! 14 января.


7-16758
Dimaz-z
2003-11-19 17:13
2004.02.06
Работа с адресной книгой Windows.


3-16050
Mic_2000
2004-01-12 18:28
2004.02.06
Request size limit exceeded - что это за ошибка такая?


11-16204
freeloader
2003-05-22 16:59
2004.02.06
StretchDraw()


1-16222
Builder
2004-01-26 22:52
2004.02.06
StringGrid