判断任意数字是否为素数

素数又被称质数(Prime number)指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。大于1的自然数若不是素数,则称之为合数

用python实现判断一个数字是否为素数。

第一种方法整除法,通过对数字范围以内的数字进行循环整除,效率很低,数字大的时候耗时,代码实现:

def is_prime(n):
    if n == 2:
        return True
    if n % 2 == 0 or n <= 1:
        return False

    sqr = int(math.sqrt(n)) + 1

    for divisor in range(3, sqr, 2):
        if n % divisor == 0:
            return False
    return True

第二种方法是用算法优化整个逻辑与执行流程,筛选出n以内的所有素数,原理是通过定义一个数组,生成 n*True 个元素,代码实现:

def prime_sieve(n):
    sieve_lst = [True] * n
    sieve_lst[0] = False              # 第一个和第二个不是素数,设为False
    sieve_lst[1] = False
    for i in range(3, int(math.sqrt(n))+1):
        pointer = i *2                # 对n数字以内的倍数,全部设为False
        while pointer < n:
            sieve_lst[pointer] = False
            pointer += i   

    primes = []
    for x in range(n):
        if sieve_lst[x]:
            primes.append(i)
    print primes
    return primes

prime_sieve(33)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]

此算法来源于 《Hacking Secret Ciphers with Python》一书

时间: 2024-11-01 01:12:04

判断任意数字是否为素数的相关文章

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

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

判断2~100的所有素数,是素数输出并打印

/** * 判断2~100的所有素数,是素数输出并打印 * 10个一换行 */ public class IsPrime { public static void main(String[] args) { int num = 100; printPrime(num); } public static void printPrime(int num) { int count = 0; //记素数的个数 /*检验2~num之间所有的数字*/ for (int i = 2; i <= num; i+

c语言实现判断一个数是否是素数

就是判断一个数是否是素数,网上很多版本,我觉得都有点问题,今天一个朋友问我这个问题,我才知道,现在我就贴出自己的代码,很有用哦!! #include<stdio.h> #include<math.h> int Prime(unsigned int a) { unsigned int i; int k=0; if (a==1) k=1; else for(i=2;i<sqrt(a);i++) if(a%i==0) { k=1; break; } return k; } int

C语言之函数调用09—判断一个数是否为素数

//函数调用 /* ========================================================== 题目:判断一个数是否为素数.如3是素数,4不是素数. ========================================================== */ #include<stdio.h> #include<stdlib.h> int sushu(int n) { int i,k; k=n/2;//控制结束位置! for(

判断该数字是否在数组中。

/* 在一个长度为10的整形数组中,已经放置好了任意10个整数.要求用户任意输入  一个整数,判断该数字是否在数组中.如果在,删除数组中该元素,并把后面的  元素往前挪.(让空出的位置在最后) */ #include <stdio.h> void main() {  int array[10] = {45,12,23,56,78,67,89,34,90,11};  int input = 0,i;    printf("请输入一个任意整数:");  scanf("

经典算法之判断一个整数是否为素数

经典算法之判断一个整数是否为素数 1 /** 2 判断一个数是否为素数 如: 3 输入: 任意一个数 12 4 输出: 1或0(1表示为素数) 0 5 */ 6 /**************被称为笨蛋的做法************/ 7 #include <stdio.h> 8 9 int main() 10 { 11 12 int i,n; //i为计数数,n为存储用户输入的数 13 14 do //循环检测用户输入的数据>0为合法 15 scanf("%d",&

[华为机试练习题]54.判断任意两台计算机的IP地址是否属于同一子网络

题目 描述: 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据. 最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯.就这么简单. 请看以下示例: 运算演示之一: IP地址:192.168.0.1 子网掩码:255.255.255.0 AND运算 转化为二进制进行运算: IP地址:11010000.10101000.00000000.00000001 子网掩码:1111111

判断101-200之间有多少个素数,并输出所有素数(C)

/* *题目:判断101-200之间有多少个素数,并输出所有素数. * *程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果 *能被整除,则表明此数不是素数,反之是素数. */ #include<stdio.h> #include<math.h> int main() { int k,i,j,m,sum=0; int flag; for(i=101;i<=200;i++){ flag=1; k=sqrt(i); for(j=2;j<=k;j++){

判断101-200之间有多少个素数,并输出所有素数。

package com.mumu.ready;import static com.mumu.ready.Print.print; public class Prime {//题目:判断101-200之间有多少个素数,并输出所有素数. public static boolean prime(int n) { boolean flag=false; for(int i=2;i<=n/2;i++) { if(n%i==0) { flag=true; continue; } } return flag;