Помогите, пожалуйста, господа-программисты. По алгебре было задание найти последнюю цифру числа 333^335. Я решил, получилось 7. Для уверенности проверил в Паскале (PascalABC), т.к. с другими языками программирования я плохо знаком. Написал вот такую примитивную программу:
var a,n,cifra:integer;
begin
a:=333;
n:=1;
repeat
begin
a:=(a*333);
n:=n+1;
cifra:=(a mod 10);
end
until n=335;
write('последняя цифра = ',cifra);
end.
Всё бы хорошо, но Паскаль мне говорит: "последняя цифра = 1". Тут я уж не поленился и полностью расписал вручную все значения степени до 335 (периодом подбирал: 5степень - 3, 15степень - 7, 25степень - 3, 35степень - 7 и т.д.), и у меня всё равно вышло значение 7. Я так полагаю, что программе просто тяжело так много считать, и где-то она сбилась. Скажите, пожалуйста, можно ли решить эту задачу в паскале, и, если нет, то можно ли её решить в каком-нибудь другом языке программирования? Заранее благодарю.
333 ^ 335 последняя цифра числа, так что задачу упрощаем до 3 ^ 335
Программист думает за компьютер и создает программу
3 - в конце 3
3*3 - в конце 9
3*3*3 - в конце 7
3*3*3*3 - в конце 1
3*3*3*3*3 - в конце 3
3*3*3*3*3*3 - в конце 9
3*3*3*3*3*3*3 - в конце 7
3*3*3*3*3*3*3*3 - в конце 1
Как видишь идет последовательность 3 9 7 1 и усе, даже компьютера не надо
На паскале все тоже можно:
var
a: BigInteger;
i: Integer;
begin
a := 1;
for i := 1 to 335 do
begin
a := a * 3;
end;
Writeln(a);
end.
Только ответ не такой как ниже так как я упростил задачу до 3 ^ 335:
А если не упрощать, то сходится:
104428303963710884031996217410926079033001743437583849801773739996601002969847117146981471048184870115150822328203877365207294716013959966059805494210332820661018739546452171563309460722530854807185262628295540682976979866673378165836012214950618661959903125601489024531661490951209984569103708485086224009212621642374633666319344931694254364060998762577380911749491002517414410123028549932735107128351676291649034007726892864452666373732345642509052508402258619705478985322861109677796592159565167994512958227677781694934523468140681692170107340664043535122350444902376268207962011119715877647026206375939263806371006222200384797643237888031204492818792726653648908643484829053615064311053504777701761054868076544156183254780351345325292121694665829599260328664523308500751353767387074968660926218651489233304845625125224342074038682283845321157
В Паскале ABC.NET есть тип BigInteger, на котором 333³³⁵ вычислить легко (этот же тип есть, кстати, и в C# !). Но на Питоне определить последнюю десятичную цифру этого числа легче всего:
print(333**335%10) - вот и вся программа!.
Скорее всего Паскаль не справляется с таким большим размером цифр и пишет абы что, можно наверное это обойти или использовать другие языки, типо питона, семейства си и других популярных языков, в которые Паскаль не входит...
На питоне можно, там поддерживается длинная арифметика по стандарту. И вправду в конце 7.
Хз почему паскаль умирает, ведь идёт переполнение старших битов, а они нам и не особо нужны.
104428303963710884031996217410926079033001743437583849801773739996601002969847117146981471048184870115150822328203877365207294716013959966059805494210332820661018739546452171563309460722530854807185262628295540682976979866673378165836012214950618661959903125601489024531661490951209984569103708485086224009212621642374633666319344931694254364060998762577380911749491002517414410123028549932735107128351676291649034007726892864452666373732345642509052508402258619705478985322861109677796592159565167994512958227677781694934523468140681692170107340664043535122350444902376268207962011119715877647026206375939263806371006222200384797643237888031204492818792726653648908643484829053615064311053504777701761054868076544156183254780351345325292121694665829599260328664523308500751353767387074968660926218651489233304845625125224342074038682283845321157