1013 数素数
我做这题使用了两种方法。
第一种,就是在第N到第M个素数的范围内,一边判断是否是素数,一边输出。
#include"iostream" #include"cmath" using namespace std; bool isPrime(int n) {//判断是否是素数 if(n <= 1) return false; int t = sqrt(n); for(int i = 2; i <= t; ++i) if(n%i == 0) return false; return true; } int main() { int M,N; scanf("%d%d",&M,&N); int ans = 0; for(int i = 2; ; ++i) { if(isPrime(i) == true) { ++ans; if(ans >= M && ans <= N) { printf("%d",i); if(ans == N) break; if((ans-M) % 10 == 9) printf("\n"); else printf(" "); } } } return 0; }
第二种,就是先用筛素数法得到素数表,然后再把第N到第M个之间的素数输出。(这里的素数表一定要大于105000,不然测试点4过不了)
#include"iostream" #include"algorithm" using namespace std; int prime[105000] = {0},num = 1; bool hashtable[105000] = {false}; void findPrime() { //筛素数 for(int i = 2; i < 105000; ++i) { if(hashtable[i] == false) prime[num++] = i; for(int j = i+i; j < 105000; j+=i) hashtable[j] = true; } } int main() { findPrime(); int m,n; cin>>m>>n; if(m > n) swap(m,n); for(int i = m; i <= n; ++i) { cout<<prime[i]; if(i == n) break; else if((i-m) % 10 == 9) printf("\n"); else printf(" "); } return 0; }