质数筛选器

     从TopCoder学来的一段代码,很简炼的说。特录之以为志。

  

ContractedBlock.gif ExpandedBlockStart.gif质数筛选器
 
   
const int MAX_NUM = 100001 ;
unsigned
char isPrime[MAX_NUM];

void GetPrime ( void )
{
memset(isPrime,
1 , sizeof (isPrime));

isPrime[
0 ] = isPrime[ 1 ] = 0 ;

for ( int i = 2 ; i * i < MAX_NUM; i ++ )
if (isPrime[i])
for ( int j = i * i; j < MAX_NUM; j += i)
isPrime[j]
= 0 ;
}

 


转载于:https://www.cnblogs.com/Gigabyte/archive/2009/06/18/1505433.html

在C语言中,歌德巴赫猜想是一个未解决的问题,它指出每个大于2的偶数都可以表示为两个质数之和。虽然我们无法编写一个直接验证所有大整数的歌德巴赫数筛选,因为这需要巨大的计算量,但我们可以创建一个简单的程序,用于演示如何找出某个范围内的所有质数,然后间接地说明哪些数可以作为歌德巴赫猜想的一部分。 下面是一个简单的C程序,用于筛选并打印出一定范围内所有歌德巴赫对: ```c #include <stdio.h> #include <stdbool.h> // 判断是否为质数 bool is_prime(int num) { if (num <= 1) return false; for (int i = 2; i * i <= num; i++) { if (num % i == 0) return false; } return true; } // 主函数,歌德巴赫筛选 void find_goldbach_pairs(int start, int end) { printf("歌德巴赫对在 %d 到 %d 范围内:\n", start, end); for (int num = start; num <= end; num += 2) { // 只考虑偶数 if (is_prime(num - 2)) { printf("%d = %d + %d\n", num, num - 2, 2); // 2是最小的质数 } else { for (int i = 3; i * i <= num - 2; i += 2) { if (is_prime(i) && is_prime(num - i - 2)) { printf("%d = %d + %d\n", num, i, num - i - 2); break; // 找到一对即可 } } } } } int main() { int range_start = 10; // 范围起始值,你可以根据需求调整 find_goldbach_pairs(range_start, range_start + 50); // 示例:从range_start到range_start+50 return 0; } ``` 这个程序会在指定范围内找出歌德巴赫对,并打印出来。由于实际应用中歌德巴赫猜想的验证通常是理论研究的对象,所以在编写这类程序时通常会假设入较小,不会遍历大量数字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值