赞
踩
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
10 31
7 143
本题从算法笔记里面学到了素数筛,所以把素数筛用到了这里,代码如下
#include<stdio.h> #include<stdbool.h> #include<math.h> //如下是判断是否是素数 的函数 bool isPrime(int n){ if(n<=1) return false; int sqr=(int)sqrt(1.0*n);//sqrt要求的是浮点数 for(int i=2;i<=sqr;i++){ if(n%i== 0) return false; } return true; } const int maxn=10100; int Prime[maxn],count=0;//prime数组用来存储素数,count用来记数 bool p[maxn]={0};//如果p[i]为素数则存为true,否则存为false,以备不时之需 void Find_Prime(){ int m,n; scanf("%d %d",&m,&n); for(int i=m;i<n+1;i++){ //规定取值范围 if(isPrime(i)==true){ Prime[count++]=i; p[i]=true; } } } int main(){ Find_Prime(); int sum=0; for(int i=0;i<count;i++){ sum+=Prime[i]; //若要枚举则直接输出prime[] }printf("%d %d",count,sum); return 0; }
收获良多。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。