判断素数的相关代码

素数是什么大家应该都知道,一个数是不是素数也很简单。

一下是代码,分别由两个函数。一个函数实现判断一个数是不是素数,另外一个函数实现输出小于等于一个特定数字的所有素数。

#include "stdafx.h"
#include <iostream>
using namespace std;
//Display_sushu(int m)函数输出小于等于m的所有素数
void Display_sushu(int m)
{
    int n=0;
    int i;
    for(int j=1;j<=m;j++)
    {
        if (j==3||j==2||j==1)    //这里是j不是m,下面也是一样的
        {
            cout<<j<<"是素数"<<endl;
            continue;
        }
        n=j/2;
        for (i=2;i<=n;i++)
        {
            if (j%i==0)
            {
                //cout<<m<<"不是素数"<<endl;
                break;
            }
        }
        if (i>n)
            cout<<j<<"是素数"<<endl;
    }
}

//Is_sushu(int m)函数判断m是不是素数
void Is_sushu(int m)
{
    int n=m/2;
    if (m==1||m==2)
    {
        cout<<m<<"是素数"<<endl;
        return;
    }
    for (int i=2;i<=n;i++)
    {
        if (m%i==0)
        {
            cout<<m<<"不是素数"<<endl;
            return;
        }
    }
    cout<<m<<"是素数"<<endl;
}

int main()
{
    int m;
    cin>>m;
    Is_sushu(m);
    cin>>m;
    Display_sushu(m);
    return 0;
}

截图:

image

PS:n=m/2即循环次数的控制,其实还可以写成n=sqrt(m),但是要求数据类型有要求。且需要头文件cmath。

网摘:VC 2008后为重载函数,原型为 float sqrt (float),double sqrt (double),double long sqrt(double long)

注意没有sqrt (int),但是返回值可以为int。

这样子循环次数更少,效率更高。

可以这样改的原因就是,一个数m如果可以分解成两个数(因子)的乘积(除开1和它本身),那么至少有一个因子小于等于sqrt(m),另外一个因子大于等于sqrt(m),最特别的两个因子都等于sqrt(m),即sqrt(m)*sqrt(m)。

原文地址:https://www.cnblogs.com/audi-car/p/4611648.html