判断一个数是不是质数的程序

判断一个数是不是质数的程序,第1张

int main()

{

int a=0,num=0;

scanf("%d",&num);

for(int i=2;i<num;i++)

{ if(num%i==0){

a++;

}

}

if(a==0){

printf("此数是质数。");}

else {printf("此数不是质数。");}

return 0;

}

新建一个Win32 Console Application,创建一个Hello World!程序,把如下代码粘进去运行。

#include "stdafxh"

#include <stdioh>

void main()

{

int a,k=0;

printf("请输入大于1的正整数:");

scanf("%d",&a);

for(int i=2;i<a;i++)

if(a%i==0) {k=1;break;}

if(k) printf("%d不是质数!可以被%d整除!\n",a,i);

else printf("%d是质数!\n",a);

}

抓住两个条件:

1质数,除了1和自己,没有别的约数。

2约数除了自己,一般都是不大于自己的一半的。

那么,你是否就该明白,整数n,在1~n/2之间做循环,如果在这个区间里一个数i,并且有n%i==0;则说明该整数不是质数。

(注意,1,既不是质数也不是合数。如果n=2,做特别处理)

代码吗,自己整,授之以渔。希望问题帮你解决了。

#include<stdioh>

#include <mathh>

void main()

{ int zhi(int);

int j=0,b[20]={1,3,7,9},a[20]={2,3,5,7},c,l=4,d[20],n,g=0,h=0,i,N,s=10,z,f;

scanf("%d",&N);

for(i=1;i<=N-1;i++)

{

for(j=0;j<l;j++)

{

n=a[j]s;

f=n;

for(h=0;h<4;h++)

{ n=n+b[h];

c=zhi(n);

if(c==1)

d[++g]=n;

n=f;

}

}

for(j=0;j<g;j++)

a[j]=d[j+1];

l=g,z=g,g=0;

}

if(N==1)

printf("2\n3\n5\n7\n");

else

for(j=1;j<=z;j++)

printf("%d\n",d[j]);

}

int zhi(int m)

{ int k,i,c=0;

k=(int)sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>k) c=1;

return c;

}

我写了几种方法,并逐步优化,并且对每一种方法进行了1000000次的调用测试每种方法的速度,仅供参考:

import javamathBigInteger;

public class Test_04 {

    /

      最笨重的一种方法,用该整数分别除以比它小的数,看是否能被整除

     /

    public boolean isPrimeNum_1(int num) {

        // 识别小于2的数

        if (num < 2) {

            return false;

        }

        for (int i = 2; i < num; i++) {

            if (num % i == 0) {

                return false;

            }

        }

        return true;

    }

    /

      优化第一种方法<br>

      1、偶数不可能是质数<br>

      2、对于大于2的数,如果一个数a大于数b的一半,那么b不可能被a整除

     /

    public boolean isPrimeNum_2(int num) {

        // 2特殊处理

        if (num == 2) {

            return true;

        }

        // 识别小于2的数和偶数

        if (num < 2 || num % 2 == 0) {

            return false;

        }

        int max = num / 2;

        for (int i = 3; i < max; i += 2) {

            if (num % i == 0) {

                return false;

            }

        }

        return true;

    }

    /

      在第二种方法上再次优化,利用数字的性质:<br>

      一个数不是素数就是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,<br>

      一个小于或等于它的平方根,并且成对出现。<br>

      这样就可以把计算量大幅度减少

     /

    public boolean isPrimeNum_3(int num) {

        if (num == 2) {

            return true;// 2特殊处理

        }

        if (num < 2 || num % 2 == 0) {

            return false;// 识别小于2的数和偶数

        }

        double sqrt = Mathsqrt(num);

        for (int i = 3; i <= sqrt; i += 2) {

            if (num % i == 0) {

                return false;

            }

        }

        return true;

    }

    /

      Java中的BigInteger中已经写好了一个判断是否为质数的方法,直接用就可以了

     /

    public boolean isPrimeNum_4(int num) {

        BigInteger integer = BigIntegervalueOf(num);

        return integerisProbablePrime(1);

    }

    public static void main(String[] args) {

        Test_04 test_04 = new Test_04();

        int num = 991;

        Systemoutprintln(test_04isPrimeNum_1(num));

        long startTime = SystemcurrentTimeMillis();

        for (int i = 0; i < 1000000; i++) {

            test_04isPrimeNum_1(num);

        }

        long endTime = SystemcurrentTimeMillis();

        Systemoutprintln("第一种方法运行时间:" + (endTime - startTime) + "ms");

        Systemoutprintln(test_04isPrimeNum_2(num));

        startTime = SystemcurrentTimeMillis();

        for (int i = 0; i < 1000000; i++) {

            test_04isPrimeNum_2(num);

        }

        endTime = SystemcurrentTimeMillis();

        Systemoutprintln("第二种方法运行时间:" + (endTime - startTime) + "ms");

        Systemoutprintln(test_04isPrimeNum_3(num));

        startTime = SystemcurrentTimeMillis();

        for (int i = 0; i < 1000000; i++) {

            test_04isPrimeNum_3(num);

        }

        endTime = SystemcurrentTimeMillis();

        Systemoutprintln("第三种方法运行时间:" + (endTime - startTime) + "ms");

        Systemoutprintln(test_04isPrimeNum_4(num));

        startTime = SystemcurrentTimeMillis();

        for (int i = 0; i < 1000000; i++) {

            test_04isPrimeNum_4(num);

        }

        endTime = SystemcurrentTimeMillis();

        Systemoutprintln("第四种方法运行时间:" + (endTime - startTime) + "ms");

    }

}

输出结果:

true

第一种方法运行时间:2732ms

true

第二种方法运行时间:671ms

true

第三种方法运行时间:68ms

true

第四种方法运行时间:1064ms

//我不知道你需要哪种语言编写的程序,所以就用了现在比较流行的三种编程语法

//程序1:c++运行环境

#include<stdioh>

int is_prime_number(int num){

int i;//循环控制变量

int lag=1;//是否为质数的一个标志,当lag为1时表示该数为质数,为0时表示不为质数

if(num==1)

lag=0;

else

for(i=2;i<num;i++)

if(num%i==0){

lag=0;

break;

}

return lag;

}//判断数num是否为质数,如果为质数则返回1,如果不为质数则返回0

int get_result(){

int i;

int sum=0;//用来保存1到10之间的质数之和

for(i=1;i<=10;i++)

if(is_prime_number(i))

sum+=i;

return sum;

}//返回1到10之间的质数之和

void main(){

printf("1到10之间的质数之和为:%d\n",get_result());

}

//程序2:java运行环境

class prime_number

{

int is_prime_number(int num){

int i;//循环控制变量

int lag=1;//是否为质数的一个标志,当lag为1时表示该数为质数,为0时表示不为质数

if(num==1)

lag=0;

else

for(i=2;i<num;i++)

if(num%i==0){

lag=0;

break;

}

return lag;

}//判断数num是否为质数,如果为质数则返回1,如果不为质数则返回0

int get_result(){

int i;

int sum=0;//用来保存1到10之间的质数之和

for(i=1;i<=10;i++)

if(thisis_prime_number(i)==1)

sum+=i;

return sum;

}//返回1到10之间的质数之和

public static void main(String[] args)

{

prime_number prime_number1=new prime_number();

Systemoutprintln("1到10之间的质数这和为:"+prime_number1get_result());

}

}

//程序3:javascript编程语法(将下列程序复制到文本文件后,保存为htm格式,双击即可得出结果)

<html>

<head>

<meta >

使用java编写判断自然数是否为素数的方式是,使用scanner来接受用户输入的数值,使用素数的算法,实例如下:

Scanner sr = new Scanner(Systemin);

    Systemoutprint("请输入a的值:");

    int a = srnextInt();

    boolean is = true;

    if (a < 1)

    {

      Systemoutprintln(a + "不是质数,因为他小于一");

    }

    else

    {

      List<Integer> list = new ArrayList<Integer>();

      for (int i = 2; i < a; i++)

      {

        if (a % i != 1 && a % i != a)

        {

          if (a % i == 0){

            is=false;

            listadd(i);

          }

        }

      }

      if(is){

        Systemoutprintln("a是质数");

      }else{

        String yz="";

        for (int i = 0; i < listsize(); i++)

        {

          if (yz=="")

          {

            yz=yz+listget(i);

          }else{

            yz=yz+","+listget(i);

          }

        }

        Systemoutprintln("a不是质数,因为他含有因子"+yz);

      }

    }

以上就是关于判断一个数是不是质数的程序全部的内容,包括:判断一个数是不是质数的程序、如何用c语言编写出判断一个数是否为质数的程序、用JAVA编写程序:“判断n是不是质数”等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9410089.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存