判断素数的相关代码
素数是什么大家应该都知道,一个数是不是素数也很简单。
一下是代码,分别由两个函数。一个函数实现判断一个数是不是素数,另外一个函数实现输出小于等于一个特定数字的所有素数。
#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; }
截图:
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)。