c语言一个数等于素数的乘积,C语言实现判断一个数是否为素数并求100以内的所有素数...
判斷一個(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)題。
- 上一篇: 大数据时代——从谢顿计划说开去
- 下一篇: 获取网站后台权限理解