本題要求統計給定整數M和N區間內素數的個數並對它們求和。
輸入格式:
輸入在一行中給出兩個正整數M和N(1≤M≤N≤500)。
輸出格式:
在一行中順序輸出M和N區間內素數的個數以及它們的和,數字間以空格分隔。
輸入樣例:
10 31
結尾無空行
輸出樣例:
7 143
結尾無空行
整體思路:
本題關鍵就在於判斷質數,判斷質數網上經典的代碼很多,我的想法是從2~t-1,用t分別模這些數,如果出現模為0則判斷非質數。這樣子代碼效率並不高,運行速度也很慢,但是目前還沒有學習過算法和數據結構,只能等以后再來改進了。
#include <stdio.h> int main (void){ int m = 0,n = 0; scanf ("%d %d",&m,&n); int i = 0,j = 0; int p[300] = {0}; int num = 0,ince = 0,sum = 0; for (i = m;i <= n;++i) { if (i >= 3) { num = 0; for (j = 2;j <= i-1;++j) { if (i % j == 0) num++; } if (num == 0) { p[ince] = i; ince++; } } if(i == 2) { p[ince] = 2; ince++; } } for (i = 0;i < ince;++i) { sum += p[i]; } printf("%d %d",ince,sum); return 0; }
討論:
- m=2時算是特殊情況,因為上面的循環是從2開始的,單獨拿出來判斷便可。
- num是判斷質數的標的,ince用於保存質數的個數,sum用於保存和