关于求素数的源代码

 

/*
 2011年10月2日 15:38:11
 功能:让用户输入一个数值,求出从2 到 用户所输入数值直接的所有素数 和 素数的个数!!!
  
*/
# include <stdio.h>

bool IsPrime(int);
void ShowPrime(int);
void CountPrime(int);

//显示2 到 用户所输入数值 之间的所有素数
void ShowPrime(int n)
{
 int i;
 for(i=2; i<=n; ++i)
 {
  if( IsPrime(i) )
   printf("%d ", i);
 }
}
//显示2 到 用户所输入数值 之间的所有素数的个数
void CountPrime(int q)
{
 int i;
 int count = 0;
 for(i=2; i<=q; ++i)
 {
  if( IsPrime(i) )
  {
   count++;
  }
 }
  printf("%d ", count);
}

//判断用户所输入的数是不是素数
bool IsPrime(int m)
{
 int i;
 for(i=2; i<=m; ++i)
 {
  if(m%i == 0)
   break;
 } 

 /*对输入的数值m进行操作,m对 i 取余,当余数为0时,再进行判断,

当i的值和m的值相同,说明m 不能被 (2到m之间的数) 整除,所以它为质数。*/

 if(i == m)
  return true;
 else
  return false;

}
int main(void)
{
 int a;
 printf("请输入一个数:");
 scanf("%d", &a);
 printf("在 2 到 %d 之间质数是: ", a);
 ShowPrime(a);//调用函数
 printf("\n");
 printf("统计在 2 到 %d 之间质数的个数为: ", a);
 CountPrime(a);
//调用函数
 printf("\n");
 return 0;
}
/*
在Visual C++6.0中输出结果是:
_ _ _ _ _ _ _ _ _ _ _ _ _ _

请输入一个数:100
在 2 到 100 之间质数是: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
统计在 2 到 100 之间质数的个数为: 25
Press any key to continue
_ _ _ _ _ _ _ _ _ _ _ _ _ _
*/

小于等于k的素数个数的问题的测试源代码 测试大数据量时, 内存频繁分配所消耗的时间占非常大的比例, 使用大内存优化后的测试结果: -------------------------------------------------------------------------------- 11:34:52.796 -> begin CalcPrimeCount(100000000) 11:40:49.687 -> end CalcPrimeCount(100000000) {return: 5761455, used-ticks: 356890} -------------------------------------------------------------------------------- 11:40:49.687 -> begin CalcPrimeCount(200000000) 11:50:09.375 -> end CalcPrimeCount(200000000) {return: 11078937, used-ticks: 559688} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(10000) 11:50:09.375 -> end CalcPrimeCount(10000) {return: 1229, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(65536) 11:50:09.375 -> end CalcPrimeCount(65536) {return: 6542, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(100000) 11:50:09.375 -> end CalcPrimeCount(100000) {return: 9592, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(500000) 11:50:09.375 -> end CalcPrimeCount(500000) {return: 41538, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(1000000) 11:50:09.375 -> end CalcPrimeCount(1000000) {return: 78498, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(5000000) 11:50:09.375 -> end CalcPrimeCount(5000000) {return: 348513, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(10000000) 11:50:09.375 -> end CalcPrimeCount(10000000) {return: 664579, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(50000000) 11:50:09.375 -> end CalcPrimeCount(50000000) {return: 3001134, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(130000000) 11:50:09.375 -> end CalcPrimeCount(130000000) {return: 7378187, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(150000000) 11:50:09.375 -> end CalcPrimeCount(150000000) {return: 8444396, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(160000000) 11:50:09.375 -> end CalcPrimeCount(160000000) {return: 8974458, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(190000000) 11:50:09.375 -> end CalcPrimeCount(190000000) {return: 10555473, used-ticks: 0} -------------------------------------------------------------------------------- 11:50:09.375 -> begin CalcPrimeCount(180000000) 11:50:09.375 -> end CalcPrimeCount(180000000) {return: 10030385, used-ticks: 0} --------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值