用c语言怎么求素数个数???
求a,b之间的素数个数
每行输入a和b(0<=a,b<=500000)
每行输出包括a和b在内的素数个数
Sample Input
0 3
5 296
9 9
Sample Output
2
60
0
求c++代码
[解决办法]
#include <iostream>#include <cmath>using namespace std;int primeNum(int a, int b){ bool isPrime; int priNum = 0; if(a < 2) { a = 2; //0和1不是素数 } for(int i = a; i <= b; ++i) { isPrime = true; int target = static_cast<int> (sqrt(static_cast<double> (i))); for(int j = 2; j <= target; ++j) { if(i % j == 0) { isPrime = false; break; } } if(isPrime) { ++priNum; } } return priNum;}int main(){ int a, b; while(cin>>a>>b) { if(a < 0 || b < 0) return -1; cout<<primeNum(a, b)<<endl; } return 0;}
[解决办法]
#include <stdio.h>int isprime(unsigned long n){ unsigned long i; if(n == 1 || n == 2 || n == 3 || n == 5) { return 0; } else if(n % 2) { for(i = 3; i <= n / 2 + 1; i += 2) { if(n % i == 0) { return -1; } } return 0; } else { return -1; }}unsigned long count_prime(unsigned long m, unsigned long n){ unsigned count = 0; unsigned long i; for(i = m; i <= n; i++) { if(isprime(i) == 0) { count++; } } return count;}int main(int argc, char* argv[]){ unsigned long m; unsigned long n; do{ scanf("%lu %lu", &m, &n); printf("%lu\n", count_prime(m, n)); }while(m != 0 || n != 0); return 0;}
[解决办法]
http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
#include <bitset>#include <cmath>#include <iostream>void test_sieve_of_eratosthenes(){ size_t const SIZE = 1024; std::bitset<SIZE> sieve; sieve.flip(); sieve.reset(0); sieve.reset(1); size_t const finalBit = sqrt(static_cast<double>(SIZE) ) + 1; for(size_t i = 2; i != finalBit; ++i) { if(sieve[i]) { for(size_t j = i * 2; j < SIZE; j += i) sieve.reset(j); } } for(size_t k = 2; k != SIZE; ++k) { if(sieve[k]) std::cout<<k<<std::endl; }}