Другие языки программирования и технологии
Паскаль!!)) входной файл содержит два числа x и y. Выходной последнюю цифру числа x в y степени! помогите пожалуйста!
Паскаль!!)) входной файл содержит два числа x и y. Выходной последнюю цифру числа x в y степени! помогите пожалуйста
Если задачу решать «в лоб» , то получается:
Z := 1; for N := 1 to Y do Z := (Z * X) mod 10;
Но нам интересна только последняя цифра. Значит:
P := X mod 10; Z := P; for N := 2 to Y do Z := (Z * P) mod 10;
Проведём небольшой анализ:
0: 0*0=0
1: 1*1=1
2: 2*2=4, 4*2=8, 8*2=16 mod 10= 6, 6*2=12 mod 10= 2 − период (4)
3: 3*3=9, 9*3=27 mod 10=7, 7*3=21 mod 10=1, 1*3=3 − период (4)
4: 4*4=16 mod 10=6, 6*4=24 mod 10=4 − период (2)
5: 5*5=25 mod 10 = 5
6: 6*6=36 mod 10=6
7: 7*7=49 mod 10=9, 9*7=63 mod 10=3, 3*7=21 mod 10 =1, 1*7=7 − период (4)
8: 8*8=64 mod 10=4, 4*8=32 mod 10=2, 2*8=16 mod 10=6, 6*8=48 mod 10=8 − период (4)
9: 9*9=81 mod 10=1, 1*9=9 − период (2)
Становится видно, что для значений X оканчивающихся на 0, 1, 5 и 6 нет смысла в умножениях:
P := X mod 10; Z := P;
if Z mod 10 in [0, 1, 5, 6] then WruteLn(Z); { результат готов }
Для других чисел достаточно выполнить до трёх умножений (при этом для 4 и 9 достаточно двух, но этим можно пренебречь) :
P := X mod 10; Z := P;
for N := 2 to Y mod 4 do Z := (Z * P) mod 10;
Ну вот!
Как-бы всё ясно:
P := X mod 10; Z := P;
if Not(Z mod 10 in [0, 1, 5, 6]) then for N := 2 to Y mod 4 do Z := (Z * P) mod 10;
WruteLn(Z);
Z := 1; for N := 1 to Y do Z := (Z * X) mod 10;
Но нам интересна только последняя цифра. Значит:
P := X mod 10; Z := P; for N := 2 to Y do Z := (Z * P) mod 10;
Проведём небольшой анализ:
0: 0*0=0
1: 1*1=1
2: 2*2=4, 4*2=8, 8*2=16 mod 10= 6, 6*2=12 mod 10= 2 − период (4)
3: 3*3=9, 9*3=27 mod 10=7, 7*3=21 mod 10=1, 1*3=3 − период (4)
4: 4*4=16 mod 10=6, 6*4=24 mod 10=4 − период (2)
5: 5*5=25 mod 10 = 5
6: 6*6=36 mod 10=6
7: 7*7=49 mod 10=9, 9*7=63 mod 10=3, 3*7=21 mod 10 =1, 1*7=7 − период (4)
8: 8*8=64 mod 10=4, 4*8=32 mod 10=2, 2*8=16 mod 10=6, 6*8=48 mod 10=8 − период (4)
9: 9*9=81 mod 10=1, 1*9=9 − период (2)
Становится видно, что для значений X оканчивающихся на 0, 1, 5 и 6 нет смысла в умножениях:
P := X mod 10; Z := P;
if Z mod 10 in [0, 1, 5, 6] then WruteLn(Z); { результат готов }
Для других чисел достаточно выполнить до трёх умножений (при этом для 4 и 9 достаточно двух, но этим можно пренебречь) :
P := X mod 10; Z := P;
for N := 2 to Y mod 4 do Z := (Z * P) mod 10;
Ну вот!
Как-бы всё ясно:
P := X mod 10; Z := P;
if Not(Z mod 10 in [0, 1, 5, 6]) then for N := 2 to Y mod 4 do Z := (Z * P) mod 10;
WruteLn(Z);
Не нужно так глубоко рыть, все гораздо проще.
Readln(f,x,y);
Далее находим последнюю цифру в цикле
P:=1;
For I:=1 to y do begin
P:=P*x;
P:=P mod 10;
End;
Writeln(outfile,p);
Readln(f,x,y);
Далее находим последнюю цифру в цикле
P:=1;
For I:=1 to y do begin
P:=P*x;
P:=P mod 10;
End;
Writeln(outfile,p);
водка тебе в помощь
Похожие вопросы
- помогите решить задачи на паскале 1Во входном файле дана последовательность чисел. Требуется найти второе по величине чи
- помогите решить задачу Во входном файле дана последовательность чисел , число (количество чисел в после
- Помогите с Pascal. Дано натуральное число. Определите сумму m его последних цифр отличных от 0
- C++.Обычная задача : найти кол-во пар (x,y) , удовлетворяющих условию X^2+Y^2<N. Помогите оптимизировать.
- Дан файл целых чисел. Создать два новых файла, первый из которых содержит положительные числа из исходного файла...
- Помогите пожалуйста!Паскаль. Дано натуральное число N. Получить наименьшее число вида 2(m в степени), превосходящее N.
- Уравнение a*x+b*y=c
- Как найти сумму цифр пятизначного числа в турбо паскаль? Помогите, пожалуйста!!!
- <<ПОМОГИТЕ! НАПИСАТЬ ПРОГРАММУ НА СИ ИЛИ ПАСКАЛЕ КОТОРАЯ ВЫВОДИТЬ СУММУ ЦИФР ЧИСЛА ОТ 1 ДО N
- помогите пожалуйста!!3.Напишите процедуру Input(A) для заполнения массива целых чисел A размером 10 x 10: 0 0 0 ...0 0