判断一个数是否是质数在于看这个数字是否只能被1和它本身所整除的整数。但是有一个例外,1不属于质数。
c语言中的质数:
数学的概念中,素数就是只能被1和它本身所整除的整数。但是有一个例外,就是1不属于素数。所以你在输入一个整数并加以判断的时候就需要考虑这种情况了。如下即可:
while(scanf("%lu", &num) == 1 &&num != 1)
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,这时候就只需要打印一个约数即可。
第二,我们怎样知道一个数数素数呢?
如果num是素数,程序流程永远也进不了if语句中。为了解决这个问题,可以在循环外设置一个变量为某一值,比方说1,在if语句中将这个变量重设为0。那么,循环完成后,可以检查该变量是否仍然是1。如果是,则从没进入过if语句,这个数是素数。我这里用int类型的变量isPrime来当作一个标志实现这个想法。
好了,结合上面的所有想法,我们开始写代码了:
#include<stdio.h>
int main(void)
unsigned long num// 要检查的数
unsigned long div// 可能的约数
int isPrime// 素数的标志,1代表是素数,0代表不是素数
printf("Please enter an integer for analysis. ")
printf("Enter q to quit.\n")
while(scanf("%lu", &num) == 1 &&num != 1)
for(div = 2, isPrime = 1(div * div) <= numdiv++){
if(num % div == 0){// 如果能被div整除
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)
// 将isPrime设置为0,表示其不是一个素数
isPrime = 0
if(isPrime == 1){
printf("%lu 是素数.\n", num)
printf("Please enter another integer for analysis. ")
printf("Enter q to quit.\n")
printf("Bye.\n")
return 0
这里有一个关键就是,在for循环控制表达式中使用了逗号运算符,以针对每个新输入的数将isPrime初始化为1。
1、首先打开CodeBlocks,创建一个新项目。
2、项目语言,选择“c”, 我们将项目名称命名为“primeNumber”。
3、然后下一步点击“finish”。
4、创建好项目后,我们打开 “main.c”文件。
5、素数即质数,也就是除了1和它本身以外不再有其他因数,首先是实现输入口。
6、输入口完成后,接下来就是判断素数。 要判断素数,我们要从它的特点开始找。素数的因子 只有1和它本身。那么,就是说,我们可以通过找到这个数的所有因数,进行比对即可。
7、先定义好相关的变量,这里result是用来存储因子之和的,用循环,遍历所有可能因子。
其中 if判断,i是不是prime的因数。 %是求余数的运算符。当能被整除时,结果为0。
8、执行完for循环后,result中存入的就是 prime的因数之和,其中也包括它本身。接下来只要判断 prime+1 是否与result相等。如果相等,就表示result中是1+数本身,即为素数。
新建一个Win32 Console Application,创建一个Hello World!程序,把如下代码粘进去运行。#include "stdafx.h"
#include <stdio.h>
void main()
{
int a,k=0
printf("请输入大于1的正整数:")
scanf("%d",&a)
for(int i=2i<ai++)
if(a%i==0) {k=1break}
if(k) printf("%d不是质数!可以被%d整除!\n",a,i)
else printf("%d是质数!\n",a)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)