没啥好说的,求质数的话,有几种方法,一种是筛。另外一种是质数判定。筛的话,就是用一个bool数组,每次把倍数设置上,大概这样:
- for (i = 2; i <= n; ++i) {
- if (!mark[i]) { //是质数
- for (j = i * i; j <= n; j += i) {
- mark[j] = true; //合数
- }
如果质数判定的话,暴力的方法可以判定,这题范围那么小,就暴力吧。当然也可以把sqrt(n)的质数表打出来,试图分解质因数。暴力的判定方法,大概这样:
- bool isPrime(int n) {
- int i;
- for (i = 2; i * i <= n; ++i) {
- if (n % i == 0) { //合数
- return false;
- }
- }
- return true;
- }