Вы можете просто сгенерировать число случайным методом на основе последовательности Фибоначчи.
В последовательности Фибоначчи вы генерируете число на основе предыдущих. Если вам нужно случайное положительное число, просто сгенерируйте случайное число и добавьте его к последнему, это всегда будет соответствовать вашим требованиям.
Я сделал фрагмент в Python
import random
number_list=[]
r_number=0
while(r_number < 100):
b_number=random.randint(1,10)
r_number += b_number
if r_number<100:
number_list.append(r_number)
print(number_list)
И результаты:
Первое исполнение:
[4, 14, 22, 24, 26, 28, 29, 34, 35, 36, 46, 48, 51, 56, 64, 72, 79, 89, 98]
Второе исполнение:
[7, 13, 19, 27, 34, 35, 39, 43, 45, 48, 52, 58, 68, 74, 83, 86, 88, 93, 99]
Преимущество этого метода (который может быть гораздо лучше, если вы немного оптимизируете код) состоит в том, что сложность состоит в O (n) (линейном), а не в том, какой алгоритм сортировки вы используете.
Надеюсь, я решил твои сомнения
И, наконец, личное мнение: лучший отсортированный набор - это уже заказанный набор.
Редактировать 1: Я видел, что вам нужно, чтобы максимальное число было больше, чем сумма других, и это простой вариант.
import random
number_list = []
r_number = random.randint(1, 10)
LIMIT=1000
while r_number < LIMIT:
sum_ = sum(number_list)
r_number = random.randint(sum_, sum_ + 10)
number_list.append(r_number)
if number_list[-1] > LIMIT:
del number_list[-1]
print(number_list)
print("Last element minus the rest equals",number_list[-1] - (sum(number_list) - number_list[-1]))
Результаты
[3, 4, 7, 21, 37, 72]
0
[9, 19, 38, 74]
8
[4, 4, 11, 20, 47, 96]
10
[4, 5, 10, 26, 55]
10
Я только что попытался установить LIMIT на 1e99, а также синхронизировать его:
Last element minus the rest equals 7
real 0m0,023s
user 0m0,020s
sys 0m0,000s
с большим количеством вывода, как вы можете сделать из этого
./test.py |wc -c
17109
Который подсчитывает символы, указанные в выходных данных программы. В этом случае действительно длинные целые числа.