? ? ? ? ?前言
? ? ? ???今天我們來使用C語言來實現(xiàn)判斷一個數(shù)是否為素數(shù),首先我們需要了解到素數(shù)的概念,素數(shù)就是只能被1和它本身整除的數(shù)。
? ? ? ? 第一種方法
???
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
int i;int n;
printf("請輸入一個整數(shù):>");
//輸入數(shù)字
scanf("%d", &n);
//判斷是否為素數(shù)
if (n <= 1)
{
printf("%d不是素數(shù)\n", n);
}
else
{
int flag = 1;//設(shè)置flag= 1,假設(shè)n是素數(shù)
for (i = 2;i <= n/2;i++)
{
if (n % i == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d是素數(shù)\n", n);
else
printf("%d不是素數(shù)\n", n);
}
return 0;
}
? ? ? ? 這是第一種代碼,我們來分析一下,首先創(chuàng)建變量i和n,這里我們i用于循環(huán),n用來存放我們輸入的數(shù)字。之后我們設(shè)置一個if語句來判斷輸入的數(shù)是否小于1,如果小于1的話直接輸出不是素數(shù)。
????????之后我們設(shè)置一個flag,這個flag的作用是假設(shè)n是素數(shù),這里的flag是一個輔助變量,它用于追蹤當前檢查的數(shù)n,看它是否是一個素數(shù)。
? ? ? ? 之后使用一個for循環(huán)來讓n試除i,當n可以被i整除的時候,我們發(fā)現(xiàn)這個數(shù)n不是素數(shù)flag不成立,我們給flag賦值為0,之后跳出循環(huán)進行判斷,進入else語句,輸出n不是素數(shù)。
? ? ? ? 這里要注意的一點是我們試除的時候,只需要除到n/2,如果我們一個數(shù)可以被一個n/2的數(shù)整除,那么我們就沒有必要再去重復(fù)的試除它之后的數(shù)。
? ? ? ? 第二種方法了,對程序進行優(yōu)化
????????
int main()
{
int i;int n;
printf("請輸入一個整數(shù):>");
//輸入數(shù)字
scanf("%d", &n);
//判斷是否為素數(shù)
if (n <= 1)
{
printf("%d不是素數(shù)\n", n);
}
else
{
int flag = 1;//設(shè)置flag= 1,假設(shè)n是素數(shù)
for (i = 2;i <= sqrt(n);i++)
{
if (n % i == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d是素數(shù)\n", n);
else
printf("%d不是素數(shù)\n", n);
}
return 0;
}
? ? ? ? 在這個代碼中,我們使用了給n開平方的方式來使我們用來試除的n值最簡,一個數(shù)如果不能被它開平方之后得到的這個數(shù)之前的數(shù)整除的話,那么它就一定是素數(shù)了。
????????簡單舉個例子,sqrt(17)如果開平方的話得到的數(shù)是4.1左右,如果我們試除2-4之間的數(shù)之后,發(fā)現(xiàn)都不可以被n整除,那么n就是素數(shù)。
? ? ? ? sqrt是數(shù)學函數(shù),記得調(diào)用頭文件<math.h>哦
? ? ? ? 最后一種方法是使用函數(shù)調(diào)用的方式
????????
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int infer_prime(int n)
{
int i;
if (n <= 1)
{
return 0;
}
else
{
for (i = 2;i <= sqrt(n);i++)
{
if (n % i == 0)
{
return 0;
}
}
return 1;
}
}
int main()
{
//輸入一個數(shù)
int p = 0;
printf("請輸入一個數(shù)字");
scanf("%d", &p);
//通過函數(shù)判斷是否為素數(shù)
if (infer_prime(p))
printf("%d這個數(shù)字是素數(shù)\n", p);
else
printf("%d這個數(shù)字不是素數(shù)\n", p);
//輸出是素數(shù)或者不是素數(shù)
return 0;
}
? ? ? ? 我們最后使用函數(shù)調(diào)用的方式來判斷n是否是素數(shù),我們設(shè)置一個函數(shù),函數(shù)名為infer_prime(當然這個函數(shù)名也可以設(shè)置為其他,看自己設(shè)置函數(shù)名的習慣),這次在主函數(shù)中我們首先設(shè)置變量p存放我們的函數(shù),這里我們使用if語句來判斷函數(shù)是否為真,如果真(if語句判斷為1)那么我們就判斷p是一個素數(shù),如果假(if語句判斷為0),那么p就不是素數(shù)。
? ? ? ? 我們進入函數(shù),函數(shù)類型為整型,我們形參設(shè)為n,用來接受p的值,之后設(shè)置一個i用來試除n,之后就和我們之前一樣了,使用一個if語句排除小于1的數(shù)對程序的影響,之后試除到n開平方,不一樣的就是我們這里如果判斷出n是素數(shù)的話,我們直接給讓返回值為1(return 1),到我們主函數(shù)的if語句中,判斷為真(if(1)),就可以直接輸出n是素數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-857576.html
? ? ? ? 希望對大家有幫助,如果有任何疑惑可以私信博主或者留言評論區(qū),看到會馬上回復(fù)哦,程序也有不足之處,希望如果有兄弟發(fā)現(xiàn)問題可以積極指正,博主主打一個聽勸??!文章來源地址http://www.zghlxwxcb.cn/news/detail-857576.html
到了這里,關(guān)于C語言判斷一個數(shù)是否為素數(shù)的三種方法(詳細)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!