1013 数素数 (C和C++版本)
思路:
- 预先在容器(数组)中存入一万个素数。
- 输入素数序列的范围m~n,从容器中依次输出。
- 每十个输出换行,否则(当不是第n个素数时)输出空格串
C++:
#include <iostream> #include <vector> using namespace std; #define N 10000//这里N的大小指素数个数 vector<int> func() {//将一万个素数存入进容器 int n = N; vector<int> vec = { 2, 3 }; for(int m = 5; n > 0; ++m) for (int i = 2; i * i <= m; ++i) { if (m % i == 0) break; if ((i + 1) * (i + 1) > m) { vec.push_back(m); --n; break; } } return vec; } int main() { vector<int> ivec; ivec = func();//获取素数组 int m, n, ncount = 0; cin >> m >> n; for (int i = m; m <= n; ++m) {//输出容器中第m~n个素数 cout << ivec[m - 1]; ++ncount; if (ncount % 10 == 0) {//十个素数一行,末尾输出换行 cout << endl; } else { if(m + 1 <= n)//非末尾且非第n个素数 cout << " ";//输出空格串 } } return 0; }
C
#include <stdlib.h> #include <stdio.h> #define N 10000//这里N的大小指素数个数 //#pragma warning(disable:4996) void func(int *arr) {//将一万个素数存入进容器 int n = 2, m, i; arr[0] = 2; arr[1] = 3; for(m = 5; n < N; ++m) for (i = 2; i * i <= m; ++i) { if (m % i == 0) break; if ((i + 1) * (i + 1) > m) { arr[n] = m; ++n; break; } } } int main(void) { int arr[N], i; func(arr);//获取素数组 int m, n, ncount = 0; scanf("%d%d", &m, &n); for (i = m; m <= n; ++m) {//输出容器中第m~n个素数 printf("%d", arr[m - 1]); ++ncount; if (ncount % 10 == 0) {//十个素数一行,末尾输出换行 printf("\n"); } else { if(m + 1 <= n)//非末尾且非第n个素数 printf(" ");//输出空格串 } } return 0; }

浙公网安备 33010602011771号