... CPU ... There's always a chance I'll solve a block.
Sure. Totally... :-p
This isn't about solving blocks. Its about distributing the network hash rate.
EXACTLY !!!!
The blocks are just the bonus :-D
May be I am wrong about this, but I think it doesn't really matter. The "51% attack" is about having >50% of the network hash rate. A few (let alone virtual) CPU cores here and there don't really matter. They start to solve the block but effectively never finish it and thus they never actually have any effect on the blockchain. They do not mine any blocks, they are only trying to find the solution (and their work gets flushed when somebody else finds it before them).
Wild luck doesn't count here (unless you are hoping for the block reward as a lottery), because you would need a series of wild lucks in an externally defined time frame (solve several blocks in a row until the >50% entity looses it's adventage).
Theoretically, you are wrong, but:
Take the case of a single CPU hashing away: it contributes
nothing to the network until it finds a block. However, he WILL find a block if he mined long enough; it's a virtual certainty. He always has a chance = (his hashing power) / (network hashing power). Let's say it's going to take him 6 months to find a block, on average. During those first theoretical 6 months until he finds a block (if block finding was perfectly distributed), he has indeed contributed nothing security-wise.
A few (let alone virtual) CPU cores here and there don't really matter. They start to solve the block but effectively never finish it and thus they never actually have any effect on the blockchain. They do not mine any blocks, they are only trying to find the solution (and their work gets flushed when somebody else finds it before them).
This is not correct. Each computed hash is its own independent event, and its input is (assumed to be) as likely to solve the block as any other. Work does not "get flushed" when someone else finds a block, as that work was determined to be worthless anyway (it didn't solve the block). The case where work would be lost is if you were in the middle of calculating a hash when you received notice of a new block, but that's very trivial.
Now, instead of your single CPU, imagine 150 CPUs just like yours. This group of CPUs would on average solve 1 block per day. 150 X 24 = 3,600 solo-mining CPUs and you've got on average 1 block every hour. It does indeed "make a difference", however you personally with your 1 CPU are unlikely to be a contributor over the short term.