寻找默认从1开始的N个素数
void printPrime(int n, int column) { int prime = 2; printf("打印%d个素数 ", n); for (int j = 0, odd = 1; j < n; odd++) { //生成一个素数 bool fPrime = true; for (int k = 2; k <= sqrt(prime); k++) if (prime % k == 0) { fPrime = false; break; } if (fPrime) {//记录素数 printf("%-6d ", prime); j++; if (j % column == 0) printf(" "); } prime = odd * 2 + 1;//待判断的奇数 } }
从给定的任何正整数iStart处起,寻找N个素数
void printPrime(int iStart, int n, int column) { int prime = (iStart == 1) ? 2 : iStart; printf("从%d开始打印%d个素数 ", iStart, n); //odd起始要跳过已经判断了的奇数 for (int j = 0, odd = (iStart % 2 == 0) ? iStart / 2 : (iStart - 1) / 2 + 1; j < n; odd++) { //生成一个素数 bool fPrime = true; for (int k = 2; k <= sqrt(prime); k++) if (prime % k == 0) { fPrime = false; break; } if (fPrime) {//记录素数 printf("%-6d ", prime); j++; if (j % column == 0) printf(" "); } prime = odd * 2 + 1;//待判断的奇数 } }
寻找范围内iStart~iEnd的所有素数,并统计个数
void printPrime(int iStart, int iEnd, int column,int &n) { int prime = (iStart == 1) ? 2 : iStart; printf("打印素数范围%d~%d ", iStart, iEnd); n = 0; //iEnd是奇数时,转换为未来奇数,并作为前一个奇数的临界条件 iEnd = (iEnd % 2 == 0) ? iEnd / 2 : (iEnd - 1) / 2 + 1; for (int odd = (iStart % 2 == 0) ? iStart / 2 : (iStart - 1) / 2 + 1; odd <= iEnd; odd++) { //生成一个素数 bool fPrime = true; for (int k = 2; k <= sqrt(prime); k++) if (prime % k == 0) { fPrime = false; break; } if (fPrime) {//记录素数 printf("%-6d ", prime); n++; if (n % column == 0) printf(" "); } prime = odd * 2 + 1;//待判断的奇数 } }
所有代码均经过测试,结果正确。