日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言一个数等于素数的乘积,C语言实现判断一个数是否为素数并求100以内的所有素数...

發(fā)布時(shí)間:2023/12/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言一个数等于素数的乘积,C语言实现判断一个数是否为素数并求100以内的所有素数... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

判斷一個(gè)數(shù)是否為素?cái)?shù)

算法思想

設(shè)一個(gè)正整數(shù)x,sqrt(x)為x開(kāi)平方后的值,若x不為素?cái)?shù),則x=a*b,a,b為2~x-1之間的整數(shù),且當(dāng)2=< a <= sqrt(x)時(shí),必有sqrt(x)=< b?<= x-1,即a和b必有一個(gè)數(shù)在2~sqrt(x)范圍內(nèi),反推之,若x不可被2~sqrt(x)范圍內(nèi)的任何整數(shù)整除,則x必為素?cái)?shù)。

代碼實(shí)現(xiàn)

#include

#include

int main()

{

int x;

scanf("%d", &x);

printf("%d是否為素?cái)?shù): %d", x, IsPrime(x));

return 0;

}

int IsPrime(int x)

{

int i, squareRoot;

//小于或等于1的整數(shù)均不為素?cái)?shù),預(yù)先排除

if(x <= 1) return 0;

//sqrt(x)為開(kāi)平方函數(shù),其返回結(jié)果為浮點(diǎn)數(shù),通過(guò)類(lèi)型強(qiáng)轉(zhuǎn)獲得小于該浮點(diǎn)數(shù)的最大整數(shù)

squareRoot = (int)sqrt(x);

for(int i = 2;i <= squareRoot;i++)

{

//通過(guò)取余函數(shù),若除得余數(shù)為0,說(shuō)明x可被i整除,x不為素?cái)?shù)

if(x%i == 0) return 0;

}

return 1;

}

求100以?xún)?nèi)的所有素?cái)?shù)

算法思想

若一個(gè)正整數(shù)x不為素?cái)?shù),則它必定可以由兩個(gè)或兩個(gè)以上的素?cái)?shù)的乘積表示,并且這幾個(gè)素?cái)?shù)中必定有一個(gè)素?cái)?shù)小于或等于sqrt(x),即x必定可以被2~sqrt(x)中的一個(gè)素?cái)?shù)整除。設(shè)一個(gè)數(shù)組int a[101];,使a[2]=2,a[3]=3,.....,a[100]=100,排除此數(shù)組中所有可以被2~sqrt(100)中的素?cái)?shù)整除的數(shù)(素?cái)?shù)本身除外),則剩下的元素?cái)?shù)則均為素?cái)?shù)。那么如何求2~sqrt(100)中的素?cái)?shù)呢,很簡(jiǎn)單,不用求,首先從最小的素?cái)?shù)2開(kāi)始,將3~100中可以被2整除的數(shù)組元素置為0,然后往下循環(huán),下一個(gè)不為0的數(shù)組元素必定為素?cái)?shù),一直循環(huán)至下一個(gè)不為0的數(shù)組元素大于sqrt(100)時(shí),數(shù)組中可以被2~sqrt(100)中的素?cái)?shù)整除的數(shù)均被置為0了,則數(shù)組中剩下不為0的數(shù)均為素?cái)?shù)

代碼實(shí)現(xiàn)

#include

#include

#define N 100

int main()

{

int a[N+1];

SiftPrime(a, N);

PrintPrime(a, N);

return 0;

}

void SiftPrime(int a[], int n)

{

//初始化數(shù)組元素

for(int i = 2;i <= n;i++)

{

a[i]=i;

}

for(int i = 2;i <= sqrt(n);i++)

{

//當(dāng)a[i]不為0時(shí),必定為素?cái)?shù)

if(a[i] != 0)

{

//將a[i]之后所有不為0的數(shù)除以a[i]求余,若可整除,則不為素?cái)?shù),置為0

for(int j = i+1;j <= n;j++)

{

if(a[j] != 0 && a[j]%a[i] == 0)

a[j] = 0;

}

}

}

}

void PrintPrime(int a[], int n)

{

for(int i = 2;i < n;i++)

{

if(a[i] != 0)

printf("%d\t", a[i]);

}

}

來(lái)源:oschina

鏈接:https://my.oschina.net/u/4057396/blog/3135667

總結(jié)

以上是生活随笔為你收集整理的c语言一个数等于素数的乘积,C语言实现判断一个数是否为素数并求100以内的所有素数...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。