关于质数的判定方法

2016-11-12  本文已影响138人  帅帅哒小白
质数的定义:如果一个数只能被1和它本身整除,那么他就是质数
对于找质因数的方法

方式1

对于一个合数来说;它必然能够被两个数相乘而得到,这两个数之间的关系也必然是一大一小或者是两个相同的数。那么,最小的数只能是大于等于2,因此它最大的因数也只能是合数的一半。只要判断这个数在2到它最大因数之间能否被整除,即可判定它是否是质数。

方式2

相对于方式1,此种方法使除数的范围变更小。N=根号N*根号N,N的因数除了根号N;其他都是成对出现的,且必定一个大于根号N,一个小于根号N。假设N不是质数,有个因数大于等于根号N(不是N本身),则N必定有一个与之对应的小于等于根号N的因数,也就是说,如果2到根号N都没有它的因数,那么对应的根号N到N都没有N的因数,N就是个质数。

判定方法

方法一:

首先,判定1是不是质数,如果是,则输出“不是质数”;否则定义变量a,赋值为2,对变量a进行累加;在a小于输入数的一半时;假如输入的数能够被a整除的话,就将除到的值赋给变量b;如果不能整除,则a进行累加判断,直至退出循环。接下来对b进行判断。如果b大于等于2时,则输出“不是质数”;否则输出是质数。

    `<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <script type="text/javascript">`
            var numa = parseInt(prompt("请输入一个数"));
            var num = parseInt(numa/2);
            var a = 2;
            var b;
            if (numa==1) {
                document.write("不是质数");
            }
            else{
                for(a;a<=num;a++){
                if(numa%a == 0)
                    b=numa/a;
                }
                if(b>=2){
                    document.write("不是质数");
                }
                else{
                    document.write("是质数");
                }`

方法二:

首先,定义一个变量counter并赋值为0;利用while语句进行对a进行累加,并判断num值能否被整除,如果能,则对counter自增;如果不能,则a自增。加入num是质数的话,它只能被自身和1整除,counter能自增两次。那么如果counter等于2,则输出是质数;否则输出“不是质数”;

主要代码

`
var num = parseInt(prompt("请输入一个数));
var a = 1;
var counter = 0;
for(a<=num;a++){
    if(num%a==0){
        counter++;
    } 
    if(counter==2)  {
    document.write("是质数");
    }else{
    document.write("不是质数");
     }
}
`

方法三:

此种方法与方法二类似;就是先立一个flag,让flag的值为false;如果整除,则让flag的值为true;最后对flag的值判断与否。此处省略5000字。

主要代码:

`
   var num = parseInt(prompt("请输入一个数"));
    var flag = false;
    var i = num-1;
    while(i>=2){
        if(num%i==0){
            flag = true;
        }
        i--;
    }
    if (flag) {
        document.write("我不是质数");
    }else{
        document.write("我是质数");
    } 
`

总结:拿到此题时,犯得最主要的错误就是在判定其能被整除的时候,直接输出,这样造成了多次打印。改正的就是在循环里立了个flag,在循环的外面来判定flag的真假,再来打印是否是质数。这样就不会造成重复打印了。

上一篇 下一篇

猜你喜欢

热点阅读