对素数的判断和素数个数的判断

应该说这是比较高效的解题方法了吧。

素数个数计数:

class Solution {
public:
    int countPrimes(int n) {
       bool* a = new bool[n];  
     for(int i=2; i*i<n; i++) {  
        if(!a[i]) {  
            for(int j=i; i*j<n; j++) {  
                a[i*j] = true;  
            }  
        }  
     }  
     int c=0;  
       
     for(int i=2; i<n; i++) {  
        if(a[i] == false) ++c;  
    }     
  return c; 
    }
};

素数的判断:

bool primenum(int m)
    {
        int t=sqrt(m);
        for(int i=2;i<=t;i++)
        {
            if(m%i==0)
                return false;
        }
        return true;
    }

素数的判断可以对照下面一个程序:

int IsPrime(int N)
{
int i, j;  
if (N == 2) //按照国内标准,认为2是最小的素数
          return true;
      else
          if (N < 2 || N % 2 ==0)  //小于2或者大于2的偶数 不是素数
              return false;
      else //大于2的奇数
      {
          j = (int)sqrt(N + 1);  //个人认为,此处的+1毫无用处,姑且这么写吧
          for (i = 3; i <= j; i = i + 2)
              if (N % i == 0)
                  return false;
      }
      return true;
}
时间: 2024-10-25 17:15:49

对素数的判断和素数个数的判断的相关文章

代码实现:判断101-200之间有多少个素数(质数),并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

package com.heima.Coding; /* 判断101-200之间有多少个素数(质数),并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数.*/ public class Test { public static void main(String[] args) { int count = 0; for (int i = 100; i < 200; i++) { for (int j = 2; j <=

Java杂谈三之判断素数以及穷举素数

首先确认下什么是素数,又称质数 百度的定义解答: 质数(prime number)又称素数,有无限个.一个大于1的自然数,如果除了1和它本身 外,不能被其他自然数整除(除0以外)的数称之为素数(质数) 明确了素数的定义后,下面用java来判断素数以及穷举2-999以内的素数,还是一样,主 要看的是对一个数进行判断或者对一组数进行判断的思想,至于怎样判断的,百度的定义已经给了很好的解答思路. JavaPrimeNubmer:类名 enumPrimeNumber():穷举2-999以内的所有素数 m

poj2928:素数回文数的个数

总时间限制: 1000ms 内存限制: 65536kB 描述 判断11到任何一个小于1000大于11的整数之间,既是素数又是回文数的整数的个数. 输入 输入大于11小于1000的整数. 输出 11到输入的这个数之间的既是素数又是回文数的个数. 样例输入 999 543 样例输出 16 10 提示 测试数据有多组,用while()循环输入. 回文数即为左右对称的数,如:292,333. 本题数据规模不大,可以直接先把素数标记出来再进行判断. 代码如下 #include <iostream> #i

C语言:输入一个数,输出比这个数小的所有素数,并求出个数。

//C语言:输入一个数,输出比这个数小的所有素数,并求出个数. 1 #include<conio.h> 2 #include<stdio.h> 3 #include<stdlib.h> 4 #define MAX 100 5 int fun(int lim, int aa[MAX]) 6 { 7 int i, j,k=0; 8 for (i = 2; i <= lim; i++)//罗列每个数 9 { 10 for (j = 2; j < i; j++)//

判断一个素数能被几个9整除

题目:判断一个素数能被几个9整除 public class 判断一个素数能被几个9整除 { public static void main(String[] args) { //产生一个素数n int n; boolean flag = true; while(flag) { n = (int)(Math.random() * 1000 + 1); if(isPrime(n)) { flag = false; } } final int nine = 9; int count;//计算能被几个9

如何判断是否素数和某段数字中的素数有哪些

所谓素数是指除了1和它本身以外,不能被任何整数整除的数.例如17就是素数,因为它不恩那个被2-16的任一整数整除.因此判断一个整数nNum 是否素数.只需要把nNum 被2-nNum-1之间的每一个整数去除.如果都不恩那个被整除,那么nNum就是一个素数. 这里我们也可以用一个简单的办法只需被2~√m之间的每一个整数去除就可以了. #include <stdio.h> #include <math.h> int isPrimeNum(int nNum); int main() {

判断一个素数能被几个9组成的数整除?

/* 判断一个素数能被几个9组成的数整除? */ #include<stdio.h> #include<math.h> #include<malloc.h> #include<string.h> main() { int n=9,i,ss; scanf("%d",&ss); for(i=1;;i++){ if(n%ss==0){ break; }else{ n=n*10+9; } } printf("%d:%d/%d==

素数相关?(有关素数的题持续更新中)x

素数(大体举几个栗子): 素数相关知识: 素数概念: 最大公约数只有1和它本身的数叫做质数(素数) 素数小性质: 1.大于一的整数必有素因数. 2.设p是素数,n是任意一个整数 能够推出p|n,(p,n)=1; 3.设p是素数,a,b为整数,若p|ab,则ab中至少有一个能被p整除 4.素数有无穷多个证明: (素数与整数之间的关系:1整除2互素) 假定正整数中只有有限个素数 设p1,p2……pk为从小到大排列起来的数 且N=p1*p2*……pk 设M=N+1 如果M为素数,那么M要大于p1,p2

Java 实现1~100之间有多少个素数并输出所有素数

/* 2.判断1-100之间有多少个素数并输出所有素数. (将判断一个数是否是素数的功能提取成方法,在循环中直接调用即可) */ public class primeNumber{ public static void main(String[]args) { int count = 0; //产生1~100之间用for循环 for(int i=1;i<=100;i++) { if(isPrime(i)){ System.out.println(i); count++; } } System.o

关于素数的快速查找——素数筛选法

利用素数筛选法进行素数的快速查找.原理很简单,素数一定是奇数,素数的倍数一定不是素数.思路如下: 预定义N表示10000,即表示查找10000以内的素数,首先定义数组prime[]对N以内的数进行标记,奇数存为1,偶数存为0,最终实现结果为素数的prime值为1,因此将prime[2]赋值为1(2是素数).之后利用for循环,对N以内的奇数进行遍历(注意for循环的条件控制),for里用if判断是否为素数(奇数),若是,执行内部嵌套的for循环判断该奇数是否为素数,若是则标记为1,若不是则pri