Форум » Обработка целых чисел » Не сходится ответ. Задание 25. Задача 185 (4522) » Ответить

Не сходится ответ. Задание 25. Задача 185 (4522)

vorob_ann: Добрый день! Не сходится ответ, не могу понять почему, помогите, пожалуйста! [pre2] var a:array of integer; k,n,i,p,d:integer; begin k:=0; n:=400000000; while k<5 do begin i:=0; d:=1; while d*d<=n do begin d+=1; if d*d=n then begin i+=1; setlength(a,i); a[i-1]:=d; end else if n mod d=0 then begin i+=2; setlength(a,i); a[i-2]:=d; a[i-1]:=n div d; end; end; if i>=5 then begin sort(a); p:=a[0]*a[1]*a[2]*a[3]*a[4]; if (p<=n) and (p mod 100=17) then begin println(p,a[4]); k+=1; end; end; n+=1; end; end. [/pre2] Мои ответы: 72302617 150433 782217 37 166617 33 2880117 93 74874717 111

Ответов - 2

Поляков: Для Паскаля актуален выход чисел (произведения) из допустимого диапазона. У вас p - очень большое число, которое не влезает в integer (4 байта). Поэтому можно сделать так: [pre2] a:array of BigInteger; p: BigInteger;[/pre2]Есть второй вариант, который не требует BigInteger. По условию P(N) <= N, поэтому можно сначала это неравенство хитро проверить: [pre2]if (i>=5) and (n/a[0]/a[1]/a[2]/a[3]/a[4] >= 1) then begin [/pre2]

vorob_ann: Благодарю!!!



полная версия страницы