To vote, you cast your prime for a candidate, thereby consuming it. No two candidates can share a prime, because their checksums will have a common factor, which is not allowed.
If we both vote for candidate A, his checkproduct is now 35.
If ballots 11, 13 and 17 vote for candidate B, his checkproduct is 2431. Because 2431/5 = 486.2 (non-integer), you can verify that your vote was not counted for B, but it was for A, because 35/5 = 7 (an integer). And because 2431 and 35 don't share any factors, no two votes were counted twice.
I cheat when I give people their random numbers: A gets 5, B gets 5, C gets 7, D gets 11.
Now they all cast their vote: A -> 1 B -> 1 C -> 2 D -> 2
Let's tally the votes, the result for choice 1 is 5 and the result for choice 2 is 77.
A checks that its vote has been counted 5%5 == 0 so it's good. B checks that its vote has been counted 5%5 == 0 so it's good. C checks that its vote has been counted 77%7 == 0 so it's good. D checks that its vote has been counted 77%11 == 0 so it's good.
For everybody the result appears to be one vote for choice 1, 2 votes for choice 2 and 1 abstention, your scheme does not detect any wrongdoing here.
This voting scheme is just broken.