
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是不是质数”等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)