Узнайте, сколько цифр, как в клене
-
12-10-2019 - |
Вопрос
Я пытаюсь реализовать основную процедуру для создания ключа RSA. Процедура принимает диапазон чисел A и B. Это должно убедиться, что интервал между A и B составляет «пять цифр».
Итак, я придумал решение:
with (numtheory);
gen_rsa := proc(a, b)
local p, q, len_p, len_q, larger;
# the two prime-numbers
p:=safeprime(round(RandomTools[Generate](integer(range=a .. b))-1/2));
q:=safeprime(round(RandomTools[Generate](integer(rande=a .. b))-1/2));
if( evalb(log10(p) > log10(q)+5 )
[...]
Дело в том, что Maple, кажется, понимает P и Q как переменные типовой функции. Я хочу использовать Log10, чтобы выяснить, сколько цифр у Prime-Number имеет для расчета безопасного ключа RSA. Так evalb
Не удается, потому что он не может определить два логарифма ??
Решение
Вы не должны загружать упаковку вне определения Proc - это не хорошая практика.
Вам не нужно звонить evalb
, когда используешь if...then
, как это автоматически делает.
Вы можете либо использовать is
Вместо этого, или оценить оба величины, чтобы неравенство было проверено.
Например,
gen_rsa := proc(a, b)
local p, q, len_p, len_q, larger;
uses numtheory, RandomTools;
randomize();
# the two prime-numbers
p:=safeprime(round(Generate(integer(range=a .. b))-1/2));
q:=safeprime(round(Generate(integer(range=a .. b))-1/2));
if is(log10(p) > log10(q)+5) then
hi;
else
bye;
end if;
end proc:
или вы можете заменить это is
позвонить, подав заявку evalf
к обеим сторонам <
неравенство условное. ( is
Команда может использовать evalf
внутри, возможно через shake
, чтобы понять это.)
То, что вы имеете в виду под «интервалом» между P и Q, будущим «5 цифр», неясно. Если вы имеете в виду, что нужно иметь еще пять десятичных цифр, которые другой, тогда вы можете округлить или обрезать эти вызовы LOG10 отдельно. Трудно сказать, так как формулировка нечеткая.
пса Я также исправил неправильное написание «Ранде» для «диапазона» и удалил неподходящий открытый пакет сразу после if
. Анкет И randomize
Call заставит команду RandomTools производить разные ответы после каждого перезапуска или в каждом свежем сеансе.