与素数有关的程序
来源:互联网 发布:python interfaceerror 编辑:程序博客网 时间:2024/04/29 19:59
(1)判断单个数是否是素数
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:郭艳燕 * 专业班级:软件工程 * 完成日期:2012 年 11 月 9 日 * 版 本 号:v1.0 * 输入描述:一个整数 * 问题描述:判断从键盘输入的一个数是否是素数 * 程序输出: 该整数是否为素数 * 问题分析:素数是除1和自己无因子的数 ,如果m不能够除尽2~m-1中的任何一个数则为素数 改进:如果m不能够除尽2~m的平方根中的任何一个数则为素数 * 算法设计:用循环实现 */ #include <iostream>#include <cmath>#include <iomanip>using namespace std;int main( ){int m,k,i; bool prime; //定义布尔变量prime prime=true; //循环开始时设prime为真,即先认为m为素数 cout<<"请输入一个整数:"; cin>>m; //输入m的值 k=int(sqrt(m)); //用k代表根号m的整数部分 for(i=2;i<=k;i++) //检查是否能整除2~根号m if(m%i==0) //如果能整除,表示m不是素数 { prime=false; //使prime变为假 break; //终止执行本循环 } if (prime) cout<<m<<"是素数"<<endl;//如果m为素数, 输出m是素数 else cout<<m<<"不是素数"<<endl; //否则,输出m不是素数 return 0;}
(2)输出一定范围内的素数
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:郭艳燕 * 专业班级:软件工程 * 完成日期:2012 年 11 月 12 日 * 版 本 号:v1.0 * 输入描述:无 * 问题描述:输出100~200间的全部素数 * 程序输出:输出100~200间的全部素数 * 问题分析:1. 判断一个数是否是素数 (素数是除1和自己无因子的数 ,如果m不能够除尽2~m-1中的任何一个数则为素数 改进:如果m不能够除尽2~m的平方根中的任何一个数则为素数 ) 2.判断一个范围内的素数 * 算法设计:用双重循环,外循环控制m的变化(100~200),内循环判断当前外循环控制变量m是否是素数 */ #include <iostream>#include <cmath>#include <iomanip>using namespace std;int main( ){int m, k, i, n=0; bool prime; //定义布尔变量prime for(m=101;m<=200;m=m+2) //外循环 //判别m是否为素数,m由101变化到200,增量为2 { prime=true; //循环开始时设prime为真,即先认为m为素数 k=int(sqrt(m)); //用k代表根号m的整数部分 for(i=2; i<=k; i++) //内循环作用是将m被2~根号m除,检查是否能整除 if(m%i==0)//如果能整除,表示m不是素数 { prime=false; //使prime变为假 break; //终止执行本循环 } if (prime) //如果m为素数 { cout<<setw(5)<<m; n=n+1; //n累计素数的个数 } if(n%10==0) cout<<endl; //输出10个数后换行 } cout<<endl; //最后执行一次换行 return 0;}
(3)循环输入一个数,判断其是否是素数
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:郭艳燕 * 专业班级:软件工程 * 完成日期:2012 年 11 月 9 日 * 版 本 号:v1.0 * 输入描述:循环从键盘输入整数,直到输入为0 * 问题描述:从键盘上循环输入一个数,判断是否是素数,直到输入的数为0则退出程序 * 程序输出: 循环输出从键盘上输入的整数是否为素数 * 问题分析:1、一个数是否是素数的方法是除1和自己无因子的数 ,如果m不能够除尽2~m-1中的任何一个数则为素数 改进:如果m不能够除尽2~m的平方根中的任何一个数则为素数 2、循环输入,直到输入的数是0退出程序 * 算法设计:用双重循循环实现 外循环控制循环输入一个数,判断是否是0,不是0则进入内循环判断是否是素数 内循环判断输入的数是否素数 */ #include <iostream>#include <cmath>#include <iomanip>using namespace std;int main( ){int m,k,i; bool prime; //定义布尔变量prime cout<<"请输入一个整数(0退出程序)"; cin>>m; //输入m的值 while(m!=0) { prime=true; //循环开始时设prime为真,即先认为m为素数 k=int(sqrt(m)); //用k代表根号m的整数部分 for(i=2;i<=k;i++) //检查是否能整除2~根号m if(m%i==0) //如果能整除,表示m不是素数 { prime=false; //使prime变为假 break; //终止执行本循环 } if (prime) cout<<m<<"是素数"<<endl;//如果m为素数, 输出m是素数 else cout<<m<<"不是素数"<<endl; //否则,输出m不是素数 cout<<"请输入一个整数,输入为0退出程序"; cin>>m; } return 0;}
(4)建立一个判断素数的函数,用ture或false作为返回值。主程序中调用该函数来判断从键盘中输入的数是否是素数。
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:郭艳燕 * 专业班级:软件工程 * 完成日期:2012 年 11 月 9 日 * 版 本 号:v1.0 * 输入描述:一个整数 * 问题描述:判断从键盘输入的一个数是否是素数,通过函数调用实现 * 程序输出: 该整数是否为素数 * 问题分析:素数是除1和自己无因子的数 ,如果m不能够除尽2~m-1中的任何一个数则为素数 改进:如果m不能够除尽2~m的平方根中的任何一个数则为素数 把判断过程写入函数,函数的参数为被判断的数,函数的返回值如果是素数返回ture,如果不是素数返回false * 算法设计:用函数实现 */ #include <iostream> #include <cmath> #include <iomanip> using namespace std; bool IsPrimer(int x); //函数声明int main( ) {int m; cout<<"请输入一个整数:"; cin>>m; //输入m的值 if (IsPrimer(m)) cout<<m<<"是素数"<<endl;//如果m为素数, 输出m是素数 else cout<<m<<"不是素数"<<endl; //否则,输出m不是素数 return 0; } bool IsPrimer(int x) //判断x是否是素数的函数,是返回ture,否返回false{ int k; int i; bool prime=true; //定义布尔变量prime,循环开始时设prime为真,即先认为m为素数 k=int(sqrt(x)); //用k代表根号m的整数部分 for(i=2;i<=k;i++) //检查是否能整除2~根号m if(x%i==0) //如果能整除,表示m不是素数 { prime=false; //使prime变为假 break; //终止执行本循环 } return prime;}
(5)输出一定范围内的素数,通过调用函数的方式实现
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:郭艳燕 * 专业班级:软件工程 * 完成日期:2012 年 11 月 9 日 * 版 本 号:v1.0 * 输入描述:无 * 问题描述:判断一个数是否是素数,通过函数调用实现,输出100~200内的素数 * 程序输出:100~200内的素数 * 问题分析:素数是除1和自己无因子的数 ,如果m不能够除尽2~m-1中的任何一个数则为素数 改进:如果m不能够除尽2~m的平方根中的任何一个数则为素数 把判断过程写入函数,函数的参数为被判断的数,函数的返回值如果是素数返回ture,如果不是素数返回false * 算法设计:循环调用函数,循环控制变量从100变化到200,对每一个数调用函数来进行判断 */ #include <iostream> #include <cmath> #include <iomanip> using namespace std; bool IsPrimer(int x); //函数声明int main( ) {int m; int n=0; //记录素数个数 for(m=101;m<200;m=m+2) if (IsPrimer(m)) {cout<<m<<" ";//如果m为素数, 输出m n++;if(n%10==0) cout<<endl; } return 0; } bool IsPrimer(int x) //判断x是否是素数的函数,是返回ture,否返回false{ int k; int i; bool prime=true; //定义布尔变量prime,循环开始时设prime为真,即先认为m为素数 k=int(sqrt(x)); //用k代表根号m的整数部分 for(i=2;i<=k;i++) //检查是否能整除2~根号m if(x%i==0) //如果能整除,表示m不是素数 { prime=false; //使prime变为假 break; //终止执行本循环 } return prime;}
(6)循环输入一个数,判断其是否是素数,用函数调用的方式实现
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:郭艳燕 * 专业班级:软件工程 * 完成日期:2012 年 11 月 9 日 * 版 本 号:v1.0 * 输入描述:循环从键盘输入整数,直到输入为0 * 问题描述:从键盘上循环输入一个数,判断是否是素数,直到输入的数为0则退出程序 * 程序输出: 循环输出从键盘上输入的整数是否为素数 * 问题分析:1、一个数是否是素数的方法是除1和自己无因子的数 ,如果m不能够除尽2~m-1中的任何一个数则为素数 改进:如果m不能够除尽2~m的平方根中的任何一个数则为素数 ,用函数调用的方式进行素数判断 2、循环输入,直到输入的数是0退出程序 * 算法设计:用循环调用判断素数的函数实现 循环控制循环输入一个数,判断是否是0,不是0则进入内循环判断是否是素数 */ #include <iostream> #include <cmath> #include <iomanip> using namespace std; bool IsPrimer(int x);int main( ) {int m; cout<<"请输入一个整数(0退出程序)"; cin>>m; //输入m的值 while(m!=0) { if (IsPrimer(m)) cout<<m<<"是素数"<<endl;//如果m为素数, 输出m是素数 else cout<<m<<"不是素数"<<endl; //否则,输出m不是素数 cout<<"请输入一个整数,输入为0退出程序"; cin>>m; } return 0; } bool IsPrimer(int x) //判断x是否是素数的函数,是返回ture,否返回false { int k; int i; bool prime=true; //定义布尔变量prime,循环开始时设prime为真,即先认为m为素数 k=int(sqrt(x)); //用k代表根号m的整数部分 for(i=2;i<=k;i++) //检查是否能整除2~根号m if(x%i==0) //如果能整除,表示m不是素数 { prime=false; //使prime变为假 break; //终止执行本循环 } return prime; }
(7)验证哥德巴赫猜想
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:郭艳燕 * 专业班级:软件工程 * 完成日期:2012 年 11 月 12 日 * 版 本 号:v1.0 * 输入描述: 不小于6的偶数n * 问题描述: 验证哥德巴赫猜想 * 程序输出: 不小于6的偶数x=a+b ,a和b是素数 * 问题分析:一个不小于6的偶数可以表示为两个素数之和。如6=3+3,8=3+5,10=3+7,。。。 在主程序中输入一个不小于6的偶数x,然后调用函数gotbaha,在gotbaha函数中再调用IsPrime函数, * 算法设计: IsPrime函数的作用是判断一个数是否是素数,参数是要被判断的素数 在gotbaha函数中输出以下形式的结果:34=3+31(3和31都是素数) */ #include <iostream>#include <cmath>using namespace std;bool IsPrimer(int x) ;void godbaha(int x);int main(){int n;cout<<"请输入您想验证的数:";cin>>n;cout<<"输出验证结果:"<<endl;godbaha(n);//调用godbaha函数,输出满足要求的组合return 0;}void godbaha(int x) //选出满足 x=a+b ,a和b是素数 的组合{ int a,b; for(a=3;a<x/2;a=a+2) //这样可以保证a<b { if(IsPrimer(a)) //a是素数 { b=x-a; if(IsPrimer(b)) //b是素数 { cout<<x<<"="<<a<<"+"<<b<<endl; //满足x=a+b,a和b都是素数 } } }}bool IsPrimer(int x) //判断x是否是素数的函数,是返回ture,否返回false { int k; int i; bool prime=true; //定义布尔变量prime,循环开始时设prime为真,即先认为m为素数 k=int(sqrt(x)); //用k代表根号m的整数部分 for(i=2;i<=k;i++) //检查是否能整除2~根号m if(x%i==0) //如果能整除,表示m不是素数 { prime=false; //使prime变为假 break; //终止执行本循环 } return prime; }
(8)用筛选法求100以内的素数----利用数组
/*用筛选法求100以内的素数所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。具体做法如下:<1> 先将1挖掉(因为1不是素数)。<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。<3> 用3去除它后面的各数,把3的倍数挖掉。<4> 分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如找1~50的素数,要一直进行到除数为47为止(事实上,可以简化,如果需要找1~n范围内素数表,只需进行到除数为n^2(根号n),取其整数即可。例如对1~50,只需进行到将50^2作为除数即可。)如上算法可表示为:<1> 挖去1;<2> 用刚才被挖去的数的下一个数p去除p后面各数,把p的倍数挖掉;<3> 检查p是否小于n^2的整数部分(如果n=1000, 则检查p<31?),如果是,则返回(2)继续执行,否则就结束;<4> 纸上剩下的数就是素数。定义1个数组a, a[1]~a[100] 分别代表1~100这100个数。如果检查出数组a的某一元素的值不是素数,就将其值设为0,最后剩下不为0的就是素数。*/#include <iostream>#include <iomanip>using namespace std;#include <math.h>int main() {int i,j,n,a[101]; //定义a数组包含101个元素 for (i=1;i<=100;i++) //a[0]不用,只用a[1]~a[100] a[i]=i; //使a[1]~a[100]得值分别为1~100 a[1]=0; //先“挖掉”a[1] for (i=2;i<sqrt(100);i++) //i表示被除数下标,从2~sqrt(n) n=100 for (j=i+1;j<=100;j++) //j表示除数下标,从i后面的i+1到100 {if(a[i]!=0 && a[j]!=0) if (a[j]%a[i]==0) //如果整除,表示a[j]不是素数,则挖掉它 a[j]=0; } cout<<endl; for (i=1,n=0;i<=100;i++) {if (a[i]!=0) //没有被挖掉的数,即值不为0的数,为素数 {cout<<setw(5)<<a[i]<<" "; n++;} //累计素数个数 if(n==10) //输出10个数后换行 {cout<<endl; n=0;} }cout<<endl;return 0; }
- 与素数有关的程序
- 与素数有关的知识---模版
- 有关素数的知识
- 有关素数的问题
- 与反素数有关的3个题目
- C 显示约数与素数的程序
- 有关素数的基础算法
- 有关素数的基础算法
- 与性能优化有关的几个程序
- 与存储程序有关的数据字典
- 与程序竞赛有关的数学知识点
- 与程序竞赛有关的数学知识点
- 与程序竞赛有关的数学知识点
- 有关素数
- 有关素数
- 素数的求解程序
- 有关素数的基础算法--总结
- c程序中常见的与存储器有关的错误
- 【木头Cocos2d-x 008】在Lua中使用自定义类——tolua++工具使用(下集)
- Oracle提示错误消息ORA-28001: the password has expired
- EL表达式不起作用2。
- 最新区分兼容IE6/IE7/IE8/IE9/FF的CSS HACK写法
- jsp导入eclipse后中文部分乱码
- 与素数有关的程序
- isKindOfClass, isMemberOfClass, respondsToSelector, instancesRespondToSelector
- XP搭建WinCE6.0开发平台和silverlight for wince 6.0 项目开发模板
- MFC Tree Control对鼠标右击的响应.
- 循环-打印空心字符菱形
- 回合制游戏-------------------------------------------起步(二)
- SQL UNION 和 UNION ALL 操作符
- Hibernate连接池配置
- 制造JFFS2根文件系统