web_Developer_Victor
@web_Developer_Victor
Что такое google?

Как оптимизоровать поднятие в степень на Python?

Привет. Я знаю, что вопрос капец какой странный, но сейчас объясню. На этом сайте собраны разные задачи и одна из них
Поднести число в степень другого и вывести на экран. Если число больше 1000000000 — вывести -1


Вроде нет ничего сложного, но все заключается в том, что на 18 тесте появляется ошибка Time Limit. Как ее обойти? Сначала я написал алгоритм на Java и он замечательно прошел, но на Python почти такой же не хочет((

Python

n, k = input().split()
n, k = int(n), int(k)
result = n ** k

print(-1 if result > 1000000000 else result)


Java

//package main;

import java.util.Scanner;

public class main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		double n = scanner.nextInt();
		double k = scanner.nextInt();
		double res = Math.pow(n, k);
		
		if (res > 1000000000) {
			System.out.println(-1);
		} else {
			System.out.println((int) res);
		}
	}
}

  • Вопрос задан
  • 180 просмотров
Решения вопроса 2
Комментировать
AnnTHony
@AnnTHony
Интроверт
ужоснах


n, k = map(int, input().split())

if n == 0:
    result = 0
elif k == 0:
    result = 1
else:
    result = n
    for _ in range(1, k):
        if result < 1000000000:
            result *= n
        else:
            result = -1
            break

print(result)


Как тебе такое, Илон Маск?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@immelnikoff
Изучаю БД
Как вариант:
def my_pow(n, k):
    if k == 1:
        return n
    else:
        if k%2 == 1:
            return n*my_pow(n, k-1)
        else:
            k = k//2
            return my_pow(n, k)*my_pow(n, k)

Подправить код под себя наверное и сами сможете.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы