数学的概念中,素数就是只能被1和它本身所整除的整数。但是有一个例外,就是1不属于素数。所以你在输入一个整数并加以判断的时候就需要考虑这种情况了。如下即可:
while(scanf("%lu", &num) == 1 &&num != 1)
这里用到了while循环来判断输入的数值并加以判断,如果输入格式正确的话会返回一个1并将输入的数值存入num这个变量中,然后再判断num的值是否为1。
在这里有一条很好用的规则用于素数的判断:测试的数只需要界于2到num的平方根之间的所有数,看它们是否可以整除num。如果可以整除,说明输入的数不是素数;反之,说明输入的数是素数。
到这里,就会有人说平方根怎么求,其实这个很好解决。你完全可以像下面这样描述判断条件:
for(div = 2(div * div) <= numdiv++){ if(num % div == 0){ if((div * div) != num){printf("%lu is divisible by %lu and %lu.\n", num, div, num / div)
}else {
printf("%lu is divisible by %lu.\n", num, div)
}
}
}
在这里,在if条件语句里面还嵌套了一个if条件语句,用来判断两个约数是否是一样的,比如144,约数是12和12,这时候就只需要打印一个约数即可。
质数(素数也叫质数)。没有区别,就是一样的意思数字1,既不是素数,也不是合数. 有的地方说1既不是质数也不是合数,但是素数,这种说法当然是错误的
#include "stdio.h"main(){int m,k=0for(m=100m<200m++)if(fun(m)){printf("%4d",m)k++if(k%5==0)printf("\n")}printf("k=%d\n",k)}int fun(int m)
{int i,k=1
if(m<=1) k=0
//我分别写出了求素数和判断素数的程序/*
//判断一个数是否为素数
#include<stdio.h>
#include<math.h>
int isprime(int)
void main()
{
int inumber
printf("请输入一个非负整数: ")
scanf("%d",&inumber)
if(isprime(inumber))
printf("%d是素数!\n",inumber)
else
printf("%d不是素数!\n",inumber)
}
int isprime(int a)
{
int i
for(i=2i<=sqrt(a)i++)
if(a%i==0)
return 0
return 1
}
*/
/*****************************************************/
//求某个正整数以内的素数
#include"stdio.h"
#include"math.h"
int main(void)
{
int count,i,m,n,num
printf("请输入所求范围(正整数): ")
scanf("%d",&num)
count=0//count记录素数的个数
printf("%d以内的素数为:\n",num)
for(m=2m<=numm++)
{
n=sqrt(m)
for(i=2i<=ni++)
{
if(m%i==0)
break
}
if(i>n)//如果m是素数
{
printf("%6d",m)
count++
if(count%10==0)//count为10的倍数时换行
printf("\n")
}
}
printf("\n")
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)