Когда я запускаю вашу программу с Bits = 4096
, она не говорит unknown
. Он просто не завершается sh быстро (я ждал несколько минут), и я не ожидал бы, что это так.
Решение для Bitvector завершено. То есть, если вы подождете достаточно долго, он в конечном итоге вернет sat
или unsat
, при условии, что у вас не хватает памяти (и терпения). Однако для этой проблемы ожидаемое количество может быть практически бесконечным, и вам, скорее всего, не хватит памяти на вашем компьютере задолго до того, как это произойдет. Итак, я не уверен, как вы получаете это unknown
. Возможно, вы используете некоторые параметры тайм-аута или что-то еще, чего вы здесь не видите.
Вы можете попробовать добавить ограничения вида: p_vec < n
и q_vec < p_vec
, чтобы нарушить симметрию. И в некоторых случаях это действительно может помочь, поскольку n
является константой. Но в целом это бесполезно, и для любого разумного размера в битах для использования в практике криптографии c решатель будет практически l oop навсегда.
Факторизация - трудная проблема по очевидным причинам и SMT-решатель определенно не правильный инструмент для этого. Смотрите здесь для более раннего обсуждения: Функция битового вектора Z3