求质数数量 - 空间换时间

质数:被自己本身和1整出的数

int getPrimeCount(int value){
 int count = 0;
 int arr[301] = {0};// 0 - is prime , 1 - is not prime

 int num = (int)sqrt((float)value);
 for(int i = 2; i <= num ; ++i){
  if (!arr[i]){
   for(int j = i; i * j < value; ++j){
    arr[i * j] = 1;
   }
  }
 }

 for (int i = 2; i < value; ++i){
  if(arr[i] == 0){
   ++count;
  }
 }
 printf("count = %d\n", count);
 return count;
}

int test(int n){
 int  count = getPrimeCount(300);
 return 0;
}

PS:1.质数满足一个公式就是 n 不能整除n平方根以下的数字。例如 300 的平方根是17;如果300的质数那么他就不能整出17以下的数字(17,16,15.....)整除,能整除就是非质数。

        2.不是合数的数就是质数。比如:2是质数(4,6,8....)2的倍数是合数,3是质数(6,9,12... )3的倍数也是合数。以此类推,17以下所有数的倍数都是合数。

上面的函数求的是300以内所有输的质数数量。数组容量301 是为了对应 质数。(数组是0开始,最大索引也就是300);

初始化为0表示所有数都是质数。1 表示是合数。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值