当前位置: 首页 > 编程笔记 >

C ++中的按位筛选

陈开宇
2023-03-14
本文向大家介绍C ++中的按位筛选,包括了C ++中的按位筛选的使用技巧和注意事项,需要的朋友参考一下

在这个问题中,给我们一个数字N。我们的任务是使用按位筛选找到所有小于N的素数。

按位筛是Eratosthenes筛的优化版本,用于查找所有小于给定数的素数。

让我们举个例子来了解这个问题,

输入-N = 25

输出-2 3 5 7 11 13 17 19 23

按位筛子的工作方式与普通筛子相同。只是我们将使用表示素数的整数位而不是布尔类型。这样可以将空间复杂度降低到1/8倍。

示例

让我们看一下代码以了解解决方案,

#include <iostream>
#include <math.h>
#include <cstring>
using namespace std;
bool ifnotPrime(int prime[], int x) {
   return (prime[x/64]&(1<<((x>>1)&31)));
}
bool makeComposite(int prime[], int x) {
   prime[x/64]|=(1<<((x>>1)&31));
}
void bitWiseSieve(int n){
   int prime[n/64];
   memset(prime, 0, sizeof(prime));
   for (int i = 3; i<= sqrt(n); i= i+2) {
      if (!ifnotPrime(prime, i))
      for (int j=pow(i,2), k= i<<1; j<n; j+=k)
      makeComposite(prime, j);
   }
   for (int i = 3; i <= n; i += 2)
   if (!ifnotPrime(prime, i))
      printf("%d\t", i);
}
int main(){
   int N = 37;
   printf("All the prime number less than %d are 2\t", N);
   bitWiseSieve(N);
   return 0;
}

输出结果

All the prime number less than 37 are 2 3 5 7 11 13 17 19 23 29 31 37
 类似资料:
  • 我有这个json: 我想使用通过其名称查找元素“foo”(“foo”) 我尝试了类似 但它似乎不起作用(我检查了 https://jsonpath.com)

  • 我试图通过值过滤我的Json中的一个数组与Jsonpath。我想在下面的JSON中获得国家的long_name。为了做到这一点,我通过类型[0]==“国家”过滤adress_components,但它似乎不起作用。 我试过的JsonPath: 我想要的结果是:“加拿大”。 JSON: 谢谢你的帮助。

  • 我正在尝试按位置displayName筛选所有事件。由于location是一个复杂的属性,displayName是嵌套的,因此我需要有关如何执行此操作的帮助。我试过以下方法,但都没有成功。 https://graph.microsoft.com/v1.0/me/events?$expand=位置($filter=displayName eq‘东会议室’) https://graph.microso

  • 我正在将业务添加到ElasticSearch中。有些是地理位置(lon、lat坐标),有些是在线业务(没有坐标)。 这是我掌握的数据: 有什么建议吗?谢谢你。

  • 我正在使用Elementor主题生成器创建一个自定义归档页面,该页面将应用于所有类别页面。传统的“归档”小部件显示所有帖子,而帖子小部件需要一个术语。 如何使用元素自定义查询过滤器在相应的存档页面上动态显示帖子?https://developers.elementor.com/custom-query-filter/

  • 我有一个CardView项目的RecolyerView列表。然后我使用一个带有SearchView小部件的简单筛选方法来筛选列表。然后,当我单击一个经过过滤的CardView启动CardViewDetails活动时,UI显示的是原始列表中的CardView,而不是经过过滤的列表。例如,我有一个列表,在原来的列表中有二十个项目。当我输入搜索约束时,筛选的列表在RecyclerView中正确地显示了三