@zozi2222

Как ускорить этот код на Python?

В одной строке записано целое число N (3 ≤ N ≤ 1000000) - сумма числителя и
знаменателю.
Выходные данные:
Выведите два числа: первое - числитель, второе - знаменатель, разделенные пробелом
или "/". И мой код не проходит по времени ,что делать
import math
import sys
sys.setrecursionlimit(10**9)
n=int(input())
nf=n/2
c=nf
v=nf+1
def z1():
        global nf #=======5=======
        global n  #=======10======
        global c
        global v
        
        if c!=0.0 or c!=0:
                c=c-1
                if c+v!=n:
                        if n%2==0.0:
                                z1()
                        if n%2!=0.0:
                                z2()
                if c+v==float(n):
                        if math.gcd(int(c),int(v))!=1:
                                return z1()    
                        if math.gcd(int(c),int(v))==1:
                                print(int(c),int(v))
                                sys.exit(...)
        if c==0.0:
                c=nf
                v=v+1
                if c+v!=float(n):
                        if n%2==0.0:
                                z1()
                        if n%2!=0.0:
                                z2()
                if c+v==float(n):
                        if math.gcd(int(c),int(v))!=1:
                                return z1()     
                        if math.gcd(int(c),int(v))==1:
                                print(int(c),int(v))
                                sys.exit(...)

def z2():
        global nf #=======5=======
        global n  #=======10======
        global c
        global v
        c=nf+0.5
        v=nf+0.5     
        if c!=0.0:
                c=c-1
                if c+v==float(n):
                        if math.gcd(int(c),int(v))!=1:
                                z2()    
                        if math.gcd(int(c),int(v))==1:
                                print(int(c),int(v))
                                sys.exit(...)
        if c==0.0:
                c=nf
                v=v+1
                if c+v==float(n):
                        if math.gcd(int(c),int(v))!=1:
                                z2()    
                        if math.gcd(int(c),int(v))==1:
                                print(int(c),int(v))
                                sys.exit(...)  
def prov():
        global nf #=======5=======
        global n  #=======10======
        global c
        global v
        if c+v!=float(n):
                if n%2==0.0:
                        z1()
                if n%2!=0.0:
                        z2()
        


                

if n%2==0.0:
        z1()
else:
        z2()
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
adugin
@adugin Куратор тега Python
Одна микросекунда - это достаточно быстро?
def find_max_fraction(ndsum):
    for numerator in range(ndsum - 1, 0, -1):
        denominator = ndsum - numerator
        if numerator % denominator > 0:
            return f'{numerator}/{denominator}'

5fbd06e43df21414890626.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы