#includestdio.h
成都創(chuàng)新互聯(lián)公司主營夷陵網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件開發(fā)公司,夷陵h5小程序開發(fā)搭建,夷陵網(wǎng)站營銷推廣歡迎夷陵等地區(qū)企業(yè)咨詢
#includemath.h
int?isPrime(int?n)???///是素數(shù)返回1,否則返回0
{
int?i,k;
k?=?(int)sqrt(n);
for(i?=?2;?i?=?k;i++)
{
if(n?%?i?==?0)???
break;
}
if(i??k)
return?1;
else
return?0;
}
void?main()
{
int?n,i,k,sum=0;
printf("輸入大于等于1的整數(shù):n\n");
scanf("%d",n);
for(i=1;i=n;i++)
{
if?(isPrime(i)==1)
{
sum+=i;
}
}
printf("%d",sum);
}
這個問題可以分成兩部分解決,一個是判斷素數(shù),另一部分是實現(xiàn)累加和輸出。
一、判斷素數(shù)。
有以下兩種常見的判斷素數(shù)的方法。
1 通過數(shù)學(xué)定義判斷,即查找所有因子,如果存在除1及本身以外因子,則非素數(shù)。
代碼如下:
#include?math.h//用到開平方函數(shù),引用對應(yīng)的數(shù)學(xué)頭文件
int?is_prime(int?n)
{
int?i;
for(i?=?2;?i?=?(int)sqrt(n);?i?++)//根據(jù)數(shù)學(xué)定義,除本身外,其它因子不可能比平方根更大,所以只需要判斷不大于平方根的值即可。其中sqrt為求平方根函數(shù)。
if(n%i==0)?return?0;?//只要有一個符合條件的因子,則非素數(shù),返回0。
return?1;?//該數(shù)為素數(shù)。
}
這個算法可以應(yīng)用于任何情況。
2 素數(shù)篩。
這種算法的原理是,所有素數(shù)的倍數(shù)都不是素數(shù)。
先假定所有數(shù)均為素數(shù),然后去掉已知素數(shù)的倍數(shù),最終得到一定范圍內(nèi)所有素數(shù)。
代碼如下:
int?map[100];//數(shù)據(jù)規(guī)模,這里使用題目中的100,實際上應(yīng)該是標(biāo)記0-100,也就是101個單位,但是100是已知的非素數(shù),所以用100個元素就足夠了。
void?make_map(void)
{
int?i,j;
map[1]?=?1;?//1?不是素數(shù)。
for(i?=?2;?i??100;?i?++)
{
if(map[i])continue;?//對于已知的非素數(shù),不做處理
for(j?=?i*2;?j??100;?j?+=i)
map[j]?=?1;
}
}
int?is_prime(int?n)
{
if(map[1]?==?0)?make_map();?//如果1沒有被標(biāo)記為非素數(shù),那么表示map沒有生成,需要生成map。
return?map[n]?==?0;?//如map[n]為0,則n為素數(shù)
}
這種算法空間開銷與數(shù)據(jù)規(guī)模成正比,當(dāng)數(shù)據(jù)規(guī)模比較大時并不適用。
但對于數(shù)據(jù)規(guī)模小且素數(shù)判斷頻繁的情況,具有更高的時間開銷優(yōu)勢。
二、累加。
這部分可以放置于主函數(shù)。調(diào)用上述任意一種素數(shù)判斷函數(shù)皆可。
#include?stdio.h
int?main()
{
int?sum?=?0;//累加結(jié)果
int?i;
for(i?=?2;?i??100;?i?++)
if(is_prime(i))sum+=i;//累加素數(shù)。
printf("sum?=?%d\n",?sum);//輸出結(jié)果。
}
最終輸出sum=1060
void?main()
{
int?i,j,n,sum=0;
scanf("%d",n);
i=n;?//從n開始檢查
while(n0)
{????
if(prime(i)!=0)?//是素數(shù)
{
sum=sum+i;?//加上i
n--;?//個數(shù)減1
}
i++;?//取下一個數(shù)
}
printf("%d",sum);
}
網(wǎng)上的代碼意思是:n就是你輸入的任意數(shù),判斷它是否是素數(shù)的方法是用大于2小于n的數(shù)去除n,若能整除即不是素數(shù),跳出循環(huán);若數(shù)一直增加到n+1都沒有被整除,即可輸出“素數(shù)”。
你的源程序:3是素數(shù),很簡單,所以用if來提醒輸入大于3的數(shù),你的只是另一種素數(shù)算法,是優(yōu)化的算法,更快。因為只需用2到根號a去判斷。
#includestdio.h
#includemath.h
int lsPrime(int n);
int main()
{
int n, i, k, sum = 0;
printf("input n:\n");
scanf("%d", n);
for (i = 1; i = n; i++)
{
if (lsPrime(i) == 1)
{
sum += i;
}
}
printf("sum=%d\n", sum);
return 0;
}
int lsPrime(int n) ///是素數(shù)21135261返回410216531,否則返回0
{
int i, k;
k = (int) sqrt(n);
for (i = 2; i = k; i++)
{
if (n % i == 0)
break;
}
if (i k n 1)
return 1;
else
return 0;
}
按照你的要求編寫的C語言程序如下
#includestdio.h
int f(int x) //定義判斷素數(shù)的函數(shù)
{
int n,flag=1;
if(x==1) return 0;
for(n=2;nx;n++)
if(x%n==0)
flag=0;
return flag;
}
int main()
{
int i,N,M,count=0,sum=0;
scanf("%d%d",N,M);
for(i=N;i=M;i++){
if(f(i)==1){
count++;
sum=sum+i;
}
}
printf("%d到%d之間共有%d個素數(shù),它們的和為%d",N,M,count,sum);
return 0;
}
網(wǎng)站標(biāo)題:c語言用函數(shù)求素數(shù)的和,c語言用函數(shù)求素數(shù)的算法
網(wǎng)址分享:http://aaarwkj.com/article18/dsiisdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、全網(wǎng)營銷推廣、定制開發(fā)、移動網(wǎng)站建設(shè)、外貿(mào)建站、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)