c++笔记:秒解10亿以内素数及因式分解

这篇博客介绍了如何使用C++实现秒解10亿以内的素数,并通过某种算法改造为进行因式分解的程序。示例中,输入数字100000000,程序将其分解为2的9次方和5的14次方。
摘要由CSDN通过智能技术生成

最近在学c++,看到一种神奇的算法可以秒解10亿以内的所有素数,据说用了指针(还没学到,嘤),看不懂,姑且抄了下来,改吧改吧变成一个实现因式分解的程序

#include<stdio.h>
#include<memory.h>
#include<malloc.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#define max 10000

using namespace std;

#define IDX(i)			((i)/2/sizeof(unsigned int))
#define OFF(i)			((i)/2%sizeof(unsigned int))
#define ISPRIME(i)		(isprimebits[IDX(i)]&(1UL<<OFF(i)))
#define CLEARPRIME(i)	(isprimebits[IDX(i)]&=~(1UL<<OFF(i)))

int main(){
	int n, i, j;
	cin >> n;
	unsigned int *isprimebits;

	isprimebits = (unsigned int *)
		malloc((IDX(n) + 1)*sizeof(unsigned int));

	memset(isprimebits, -1, (IDX(n) + 1)*sizeof(unsigned int));

	for (i = 3; i <= n / 2; i += 2){
		if (ISPRIME(i)){
			for (j = 3 * i; j <= n; j += 2 * i){
				CLEARPRIME(j);
			}
		}
	}
//以上就是求取n以内所有素数的方式,对于3到n以内的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值