//通过时间:8ms 占用内存:1400kb
#include<iostream>
#define K 1000001
using namespace std;
char p[K+1] = {1,1,0};
int main() {
int i,j;
for(i = 2; i <= K/10; ++i)
if(!p[i])
for(j = 2; i*j <=K ; ++j)
p[i*j] = 1;
int M,N,count;
cin>>M;
cin>>N;
count=0;
for(i=M; i<=N; i++)
if(!p[i])
count++;
cout<<count;
} #include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> isp;
int a[1000001],l,r,m,n;
void init(){
a[0]=a[1]=1;
for(int i=2;i<=1000000;i++)
if(!a[i]){
for(int j=2*i;j<=1000000;j+=i) a[j]=1;
isp.push_back(i);
}
}
int main(){
init();
while(scanf("%d%d",&m,&n)!=EOF){
l=lower_bound(isp.begin(),isp.end(),m)-isp.begin();
r=upper_bound(isp.begin(),isp.end(),n)-isp.begin();
printf("%d\n",r-l);
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
private static int calPrimeNumber(int begin,int end){
boolean[] prime=new boolean[end+1];
for(int i=begin;i<prime.length;i++){
if(i%2 == 0){
prime[i]=false;
}else{
prime[i]=true;
}
}
for(int i=3;i<=Math.sqrt(1.00*end);i+=2){
for(int j=i+i;j<=end;j+=i){
prime[j]=false;
}
}
prime[2]=true;
int count=0;
for(int i=begin;i<=end;i++){
if(prime[i]){
count++;
}
}
return count;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int m=in.nextInt();
int n=in.nextInt();
int sum=calPrimeNumber(m,n);
System.out.println(sum);
}
}
//语言:C++ 运行时间:14 ms 占用内存:4976K //筛法求N以内的素数 //原理:www.cnblogs.com/xiaoxi666/p/7172440.html #include <iostream> #include <cmath> #include <vector> using namespace std; ///寻找N以内的质数的个数 size_t find_Prime(int N) { if(1==N) return 0; vector<int> prime_tmp(N,1); for(int i=0; 2*i+3<=sqrt(N); i++) { if(prime_tmp[i]) for(int j=(2*i+3)+i; j<N; j+=(2*i+3)) prime_tmp[j]=0; } vector<int> prime;//新开了一个,用来保存素数 prime.push_back(2); for(int i=0; i<N; i++) { if(prime_tmp[i] && 2*i+3<=N)//说明是质数,按照质数的方法处理 { prime.push_back(2*i+3); } } return prime.size();//prime保存了小于等于N的素数 } int main() { int M,N; while(cin>>M>>N){ cout<<find_Prime(N)-find_Prime(M-1)<<endl; } return 0; }
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
#define sc scanf
#define pr printf
#define N 999999
bool sushu[N];
void test() {
for (int i = 0; i <N; i++) {
sushu[i] = 1; //假设全部为素数
}
sushu[0] = sushu[1] = 0;
for (int i = 2; i < N; i++) {
if (sushu[i]) {
for (int j = i + i; j <N; j += i) {
sushu[j] = 0;
}
}
}
}
int a, b;
int main() {
test();
int flag = 0;
sc("%d %d", &a, &b);
for (int i = a; i <b; i++) {
if (sushu[i]) {
flag++;
}
}
pr("%d", flag);
return 0;
} #include<iostream>
#include<vector>
using namespace std;
int main(){
int n,m;
cin>>n,cin>>m;
int ret=0;
vector<bool> bools(m-n+1);
for(;n<=m;n++){
if(!bools[n]){
ret++;
for(int j=2*n;j<=m;j+=n) bools[j]=true;
}
}
cout<<ret;
} print(len([str(item) for item in filter(lambda x: not [x % i for i in range(2, x) if x % i == 0], range(a, b))]))
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <cstring>
#include <math.h>
using namespace std;
int is_sure(int n)
{
int tmp = (int)sqrt(n);
for (int i = 2; i <= tmp; i++)
if (n%i == 0) return 0;
return 1;
}
int main(int argc, char **argv)
{
int l, r;
while (cin >> l >> r)
{
int cnt = 0;
for (int i = l; i <= r; i++)
is_sure(i) && ++cnt;
cout << "" << cnt << endl;
}
return 0;
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
scanner.close();
int sum = 0;
int temp = 2;
boolean flag = false;
for (int i = m; i <= n; ++i)
{
if (i == 2){
sum += 1;
continue;
}
if (i % 2 == 0)
continue;
while (temp <= Math.sqrt(i)){
if (i % temp == 0)
{
flag = true;
break;
}
++temp;
}
if (flag){
flag = false;
temp = 2;
continue;
}
temp = 2;
sum += 1;
}
System.out.println(sum);
}
} h = 0
leap = 1
from math import sqrt
from sys import stdout
lower = int(input("输入区间最小值: "))
upper = int(input("输入区间最大值: "))
for m in range(lower,upper+1):
k = int(sqrt(m + 1))
for i in range(2,k + 1):
if m % i == 0:
leap = 0
break
if leap == 1:
# print '%-4d' % m
h += 1
#if h % 10 == 0:
# print ''
leap = 1
print '%d' % h #include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
int FindPrime(int n)
{
if (n < 3)
return 0;
bool *prime = new bool[n];
for (int i = 0; i < n; ++i)
i % 2 == 0 ? prime[i] = false : prime[i] = true;
for (int i = 3; i < sqrt(n); ++i)
{
if (prime[i] == true)
{
for (int k = 2 * i; k < n; k += i)
prime[k] = false;
}
}
int cnt = 0;
for (int i = 0; i < n; ++i)
{
if (prime[i] == true)
++cnt;
}
return cnt;
}
int main()
{
int m, n;
while (cin >> m >> n)
{
cout << FindPrime(n) - FindPrime(m) << endl;
}
}
缺陷:只能求m到n之间的素数个数,怎么改成打印出m到n之间的素数?public class prime {
public static void main(String[] args) {
//判断区间内有几个素数
countPrime();
}
private static void countPrime(){
Scanner sc = new Scanner(System.in);
int start = sc.nextInt();
int end = sc.nextInt();
int count = 0;
for (int i = start; i <= end; i++) {
if (i != 1) {
int flag = 0;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
flag = 1;
break;
}
}
if (flag == 0){
count++;
}
}
}
System.out.println(count);
}
} #include <iostream>#include <vector>#include <math.h>using namespace std;intmain(){constlonglonglength = 1000001;vector<int> data(length, 1);for(inti = 2; i < sqrt(length); i++){if(data[i] == 1){for(intj = i+i; j < length; j+=i)data[j] = 0;}}intm, n;while(cin >> m >> n){intsum = 0;for(inti = m; i <= n; i++)if(data[i] == 1)sum++;cout << sum << endl;}return0;}