首页 > 试题广场 >

返回小于 N 的质数个数

[编程题]返回小于 N 的质数个数
  • 热度指数:320 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
请考虑性能

输入描述:
一个整数N


输出描述:
小于N的质数数量
示例1

输入

10

输出

4

说明

N=10,质数有 [2, 3, 5, 7]

备注:
0、1 不属于质数。
#include<stdio.h>
int main()
{
	int i,j,n;
	int count= 0;
	scanf("%d", &n);
	for (i=n-1; i>= 2; i--)
	{
		for (j = 2; j <= i; j++)
		{
			if (i%j == 0)break;
		}
		if (i == j)
			count++;
	}
	printf("%d",count);
	return 0;
}

发表于 2022-01-21 11:23:14 回复(0)
// 简单筛法求素数
#include<iostream>
#include<cstring>
#define MAXN 100001
using namespace std;
bool prim[MAXN] = {true};

int main(int argc, char** argv){
    memset(prim, 1, sizeof(prim));
    prim[0] = false;
    prim[1] = false;
    for(int i = 2; i < MAXN; ++i){
        if(prim[i]){
         for(int j = i*i; j < MAXN; j+=i){
            prim[j] = false;
         }
        }
    }
    int num, count = 0;
    cin>>num;
    for(int i = 2; i <= num; i++){
        if (prim[i]){
            count++;
        }
    }
    cout<<count<<endl;

}
发表于 2018-07-21 23:24:37 回复(0)
importjava.util.*;
publicclassMain{
    publicstaticvoidmain(String[] args){
        Scanner sc = newScanner(System.in);
        intn = sc.nextInt();
        //int m = (int)(Math.sqrt(n));
        intcount = 0;
        if(n<=1)
        {
            count=0;
        }
        elseif(n==2)
        {
            count=1;
        }
        elseif(n==3)
        {
            count=2;
        }
        else
        {
            for(inti=2;i<n;i++)
            {
                booleanflag = true;
                for(intj=2;j<=(int)(Math.sqrt(i));j++)
                {
                    if(i%j==0)
                    {
                        flag = false;
                        break;
                    }
                   // break;
                }
                if(flag)
                {
                    count++;
                }
            }
        }
        System.out.println(count);
    }
}
发表于 2018-07-19 11:02:20 回复(0)
#include <iostream>
#include <math.h>

bool isPrime(int num) {
    
    if(num < 2) {
        return false;
    } else if (num == 2) {
        return true;
    } else {
        int k = (int)sqrt(num);
        if (num % 2 == 0) {
                return false;
            }
        for(int i = 3; i <= k; i+=2) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

int main() {
    int num;
    scanf("%d",&num);
  
    int count = 0;
    for(int i = 0; i < num; i++) {
        if(isPrime(i)){
            count++;
        }
    }
    printf("%d",count);
    return 0;
}

发表于 2018-07-17 17:03:35 回复(0)
#include<iostream>
#include<vector>
usingnamespacestd;
intmain()
{
intN,i,j,sum=0;
cin >> N;
vector<int> sum_N;
for(i = 0; i <= N; ++i)
{
sum_N.push_back(0); //    全部初始为0
}
for(i = 2; i <= N / i; i++)
{
if(sum_N[i] == 0)     //除去不是质数的,加快速度
{
for(j = 2; j <= N / i; ++j)
{
++sum_N[i*j];   //有约数,标记
}
}
}
for(i = 2; i <=N; ++i)
{
if(sum_N[i] == 0)
{
++sum;
}
}
cout << sum;
return0;
}
编辑于 2018-07-16 20:37:25 回复(0)