Разложение на простые множители (Citizen SRP-400G)
Две простые программы поиска разложения целых чисел на простые множители. Диапазон 1 <= n <= 999999999
. В первой в качестве пробных делителей проверяются числа 2 и все нечетные. Во второй - 2,3 и все числа вида 6*I+1
, 6*I-1
.
1 программа:
Input N;
If(N==1)Then{Goto 1};
For(P=2;NRmdr2==0;N=N/2){Print P};
If(N==1)Then{Goto 2};
For(P=3;P^2<=N;P=P+2)
{
If(NRmdrP==0)Then
{
Print P;
N=N/P;
P=P-2;
}
};
Label 1:;
Print N;
Label 2:;
End
2 программа:
Input N;
If(N==1)Then{Goto 1};
For(P=2;NRmdrP==0;N=N/P){Print P};
For(P=3;NRmdrP==0;N=N/P){Print P};
If(N==1)Then{Goto 2};
For(I=1;(6I-1)^2<=N;I++)
{
For(P=6I-1;NRmdrP==0;N=N/P){Print P};
For(P=6I+1;NRmdrP==0;N=N/P){Print P};
};
Label 1:;
Print N;
Label 2:;
End
После приглашения нужно вести факторизуемое число. Программы будут искать простые делители и по мере их нахождения печатать их на дисплее.
Например,
1111111 = 239*4649
- 12 сек. (1 программа), 11 сек. (2 программа)11111111 = 11*73*101*137
- 8 сек. (1 программа), 5 сек. (2 программа)111111111 = 3*3*37*333667
- 31 сек. (1 программа), 25 сек. (2 программа)1111111111 = 11*41*271*9091
- 15 сек. (1 программа), 13 сек. (2 программа)1111111121 = простое
- 29 мин. 20 сек. (1 программа), около (меньше) 24 мин. 7 сек. (2 программа)
blog comments powered by Disqus