With the restrictions imposed in the question, it's not possible for Alice to guarantee win.
Using "optimal strategy", Alice must not guess using any number larger than 100 - the reasoning behind this is that if Bob picks the number 100, 101, 102, or 103, and Alice picked a larger number than 100 (and didn't win), Bob would automatically win; in order for Alice's strategy to be "optimal", it must encompass the ability to derive a win no matter the number (including numbers 100 - 103). (In other words, it's not optimal to pick anything higher than 100).
The problem comes when she starts using small numbers. Because Alice cannot repeat numbers, and she doesn't want to go into the negatives, she further limits her usable number set - she can't use anything that's higher than 51 (51 included). If she picks 51 and Bob picked 100, she now has to derive from 49; but what if Bob picked 101? or 102? Now she has to derive from x - 51, and if that just so happened to be a prime number that's higher than what she has left, well, she's screwed (As in it's just not optimal).
There are three ways for Alice tolook at this: Starting small, starting big (relatively large numbers, eg 50 - 75 ish), or going at random.
Because the OP said "assume optimal strategies are used", Alice will not go at random. (Clearly not optimal).
If she starts big, she runs the risk of going under - as in, if she starts big, she could instantly throw herself under the bus and drop into a negative value, thus losing the game. This has the second largest risk out of the 3 approaches, and is not optimal.
If she starts small, eventually Alice runs out of small factors for what's left at the end of the spectrum. Using up all the numbers from 3 to 12 really quickly will destroy her chances at solving the problem if bob's number was relatively big.
Starting at base case of 100, since Alice must allow for the chance of 100 to be chosen.
100 % 3 leaves 97; 97 is instantly a prime number, so this cannot be the optimal strategy.
100 % 4 works; 101 % 4 = 97; prime number, uh oh.
100 % 5 works; 101 % 5 = 96 -> 96 % (lowest of the following factors 1,2,3,4,6,8,12,16,24,32,48,96, which is 3) = works.
We can follow the pattern and every time, at some point you'll end up with a prime number. (If you could suddenly guess the prime number, it wouldn't be optimal - it would only work for specific case).
I personally spent hours coding different variants of patterns to try and devise an optimal strategy, all of which lead to one inevitable result - Eventually, you hit a number that is a prime number that is too high. The moment you use that prime number, at some point in the list of possible numbers (which again I must remind you is infinite), you will hit a new prime number for which you will need another specific use case.
(Note that I also considered and tried variants of subtracting numbers from the prime numbers and then continuing. Keep reading for those algorithms, but at the end of the day you can't achieve 100% winrate.)
Because there are an infinite number of primes (See Euclids proof: https://primes.utm.edu/notes/proofs/infinite/euclids.html), there is no optimal strategy that works for ALL numbers.
Basically, whether Alice wins or not comes down to blind luck.
Best algorithm with no repeats that I could find (to give highest winrate for Alice) (This algorithm could be extended but you will always have those numbers where you miss and go negative...)
(13.6% failrate out of 9900 tests (numbers 100 to 10000)) Here, Alice wins 86.4% of the time (which is decent in a universe of infinite numbers). Even when increasing the number of test cases by a factor of 10, the failrate stays about the same.
old - fairly consistent 13.6% failrate:
edit: new Algorithm, 10% failrate ramping up towards 13.1% at 99900 tests!
Now, if the conditions were changed to say.. allow a single repeat.... that would be a different story and a different set of calculations.
I did manage to find an algorithm (If we were allowed to repeat the number "3" just one time) that only fails 40 out of 400 tries. Upon further testing, it fails 90 out of 900 tries. 990 fails out of 9900 tries. (10% failrate overall, which IMO in a universe of infinite numbers is pretty good for Alice. She wins 90% of the time) Woah! 3 flipping percent with half the length of the other algorithms from the ability to repeat one number? I wonder what adding more repeats would allow... ;)
The said algorithm if you're inclined to try it:
20, 3, 9, 5, 12, 6, 4, 10, 7, 14, 3
edit: Crayziman's algorithm (95% winrate at 99900 test cases)
edit: Crayziman's 100% algorithm with one repeating number:
TLDR for original question
There will always be those numbers that fail. There is NO 100% winrate strategy for Alice. However, Alice can maximize her winrate by starting small and adding numbers to the ends of the algorithm. It'll only increase her chances by a bit, but hey, a bit is better than nothing.