本题要求统计给定整数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用于保存和