社区
数据结构与算法
帖子详情
还是关于求素数的问题。。。
bing_huo
2003-11-20 11:35:08
求10的10次方以下素数 需要速度优化,查了一堆关于筛法的资料,发现还是很难解,谁有好的思路和方法,,,如果正确马上给分结帐
...全文
55
5
打赏
收藏
还是关于求素数的问题。。。
求10的10次方以下素数 需要速度优化,查了一堆关于筛法的资料,发现还是很难解,谁有好的思路和方法,,,如果正确马上给分结帐
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sgaosslotus
2003-11-25
打赏
举报
回复
电脑硬件配置和我的一模一样,够辈分!
bing_huo
2003-11-24
打赏
举报
回复
自己再up一下,还有没有别的思路???
liangbch
2003-11-24
打赏
举报
回复
NowCan 给出的代码来自这个贴子http://search.csdn.net/expert/topic/6/603/2003/4/3/1614558.htm,我曾在这个贴子中贴了多个程序,下面列出我最后的回复。
程序终于调通。程序运行速度如下:
计算 1千万以内的质数: 0.107s
计算 1亿以内的质数: 1.053s
计算 10亿以内的质数: 11.54s
计算 100亿以内的质数: 142.18s
我的电脑硬件配置为:奔III-550,RAM 128MB
NowCan
2003-11-20
打赏
举报
回复
其基本思想是分段筛。
NowCan
2003-11-20
打赏
举报
回复
/*
这是别人的筛素数的程序,算到200亿。
*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
#include <memory.h>
#define bool char
#define true 1
#define false 0
#define FLAG_UNKNOW 0
#define FLAG_PRIME 1
#define FLAG_NOPRIME 2
void Send2Log(__int64 nMax, __int64 nPrimeCnt);
//#define OUTPUT
clock_t start, finish;
double duration;
//clock_t duration;
int main(void)
{
bool BaseArray[100000];
int Prime[200000];
int i, j, k;
__int64 PrimeCnt;
int QRT, Start, kpoint, RetNo;
__int64 Kpoint;
start=clock();
memset(BaseArray, 1, 100000);
BaseArray[0]=false;
BaseArray[1]=false;
BaseArray[2]=true;
BaseArray[3]=true;
RetNo=11;
for(i=2; i <= sqrt(100000); i++)
{
if(BaseArray[i] == true)
for(j=i + i; j < 100000; j+=i)
{
BaseArray[j]=false;
}
}
PrimeCnt=0;
for(i=2; i < 100000; i++)
{
if(BaseArray[i] == true)
{
Prime[PrimeCnt]=i;
PrimeCnt++;
#ifdef OUTPUT
printf("%d ", i);
if(PrimeCnt % RetNo == 0)
{
if(PrimeCnt % (RetNo * 100) == 0)
printf("\n\t\t\t -- %d --\n", PrimeCnt);
else
printf("\n");
}
#endif
}
}
if(1)
{
// < 10000
RetNo=11;
for(k=1; k < 10000; k++)
{
if(k == 10)
{
RetNo=9;
Send2Log(1000000, PrimeCnt);
}
if(k == 100)
{
RetNo=8;
Send2Log(10000000, PrimeCnt);
}
if(k == 1000)
{
RetNo=8;
Send2Log(100000000, PrimeCnt);
}
kpoint=k * 100000;
memset(BaseArray, 1, 100000);
QRT= (int)sqrt(kpoint + 100000);
i=0;
while(Prime[i] <= QRT)
{
//Start = (Prime[i]-kpoint%Prime[i])%Prime[i] ;
Start=(Prime[i] - (kpoint - 1) % Prime[i]) - 1;
for(j=Start; j < 100000; j+=Prime[i])
{
BaseArray[j]=false;
}
i++;
}
for(i=0; i < 100000; i++)
{
if(BaseArray[i])
{
if(PrimeCnt < 200000) Prime[PrimeCnt]=kpoint + i;
PrimeCnt++;
#ifdef OUTPUT
printf("%d ", kpoint + i);
if(PrimeCnt % RetNo == 0)
{
if(PrimeCnt % (RetNo * 100) == 0)
printf("\n\t\t\t -- %d --\n", PrimeCnt);
else
printf("\n");
}
#endif
}
}
}
}
if(1)
{
// 10000~100000
RetNo=7;
for(k=10000; k < 200000; k++)
{
Kpoint=(__int64) k * 100000;
if(k % 10000 == 0)
{
Send2Log(Kpoint, PrimeCnt);
}
memset(BaseArray, 1, 100000);
QRT= (int)sqrt(Kpoint + 100000);
i=0;
while(Prime[i] <= QRT)
{
Start= (int)((Kpoint - 1) / Prime[i]) * Prime[i] - Kpoint;
//Start = (Prime[i]-Kpoint%Prime[i])%Prime[i] ;
//Start = (int)(Kpoint-((int)(Kpoint/Prime[i]))*Prime[i]) ;
for(j=Start; j < 100000; j+=Prime[i])
{
BaseArray[j]=false;
}
i++;
}
for(i=0; i < 100000; i++)
{
if(BaseArray[i])
{
// if(PrimeCnt<200000)
// Prime[PrimeCnt] = Kpoint+i ;
PrimeCnt++;
#ifdef OUTPUT
printf("%d ", Kpoint + i);
if(PrimeCnt % RetNo == 0)
{
if(PrimeCnt % (RetNo * 100) == 0)
printf("\n\t\t\t -- %d --\n", PrimeCnt);
else
printf("\n");
}
#endif
}
}
}
#ifdef OUTPUT
for(i=0; i < 100000; i++)
{
if(BaseArray[i] == true)
{
if(PrimeCnt < 200000) Prime[PrimeCnt]=99999 + i;
printf("%5d%05d ", 99999, i);
PrimeCnt++;
if(PrimeCnt % RetNo == 0)
{
if(PrimeCnt % (RetNo * 100) == 0)
printf("\n\t\t\t -- %d --\n", PrimeCnt);
else
printf("\n");
}
}
}
#endif
}
Send2Log(20000000000, PrimeCnt);
getch();
return 0;
}
/* */
void Send2Log(__int64 nMax, __int64 nPrimeCnt)
{
finish=clock();
duration= (double)(finish - start) / CLOCKS_PER_SEC;
//duration = (__int64)(finish - start);
printf(">%7.3f秒\t计算到%11I64u\t查出素数:%10I64u个\n", duration, nMax, nPrimeCnt);
//printf(">%13u时钟周期\t计算到%11I64u\t查出素数:%10I64u个\n",duration,nMax,nPrimeCnt) ;
return;
}
自定义函数
求素数
(质数).py
自定义函数
求素数
(质数).py
求质数
问题
的c语言实现
c语言中求质数
问题
的实现代码,可直接编译执行
Python实战--内置数据结构深入视频精讲
本课程为Python教程的内置数据结构篇,通篇围绕Python的数据结构展开讲解,包括七大数据结构:字符串、列表、元组、集合、字典、bytes、bytearray,最后通过3个经典案例:素数求解,杨辉三角,矩阵转置来强化大家的...
求解第N个质数(第N个素数)vs2010项目
求解第N个质数(第N个素数)vs2010项目计算时间差不多 用的是试除法
LabView 计算整数N内所有的素数
LabView 计算整数N内所有的素数 示例代码
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章