试探究一种查找素数算法
来源:互联网 发布:哥德尔和人工智能 编辑:程序博客网 时间:2024/06/18 13:37
解题思路:构造链表,使用筛除法
例如:求10以内素数
链表初始化:2 3 4 5 6 7 8 9 10
进行第一轮筛选后:2 3 5 7 9
也就是用2后面的数去除2,
第二轮筛选后:2 3 5 7
也就是用3后面的数去除3,
第三轮筛选后:2 3 5 7
也就是用5后面的数去除5
第四轮筛选后:2 3 5 7
代码:
#include <stdio.h>#include <stdlib.h>#define N 1e5 // over this it is so slowlytypedef struct LinkNode {int data;struct LinkNode *next;}LinkNode;LinkNode *head;void Init() {LinkNode *p, *r;int i;head = (LinkNode *)malloc(sizeof(LinkNode));if(!head) exit(1); // this is nearly impossiblehead->next = 0;r = head;for(i = 2;i <= N;i++) {p = (LinkNode *)malloc(sizeof(LinkNode));if(!p) exit(1);p->data = i;p->next = 0;r->next = p;r = p;}}void Prime() {int cnt = 0;int i =0;LinkNode *p, *q, *pre, *r;p = head->next;while(p) {q = p->next;pre = p;while(q) {if(q->data % p->data == 0) { // delete this nodepre->next = q->next;r = q;q = pre->next;free(r);}else {pre = q;q = q->next;}}p = p->next;}/* * print the prime * */for(p = head->next;p;p = p->next) {cnt++;i++;if(i % 10 == 0) {printf("\n");i = 0;}printf("%d\t", p->data);}printf("\nthere are %d primes\n", cnt);}int main() {Init();Prime();return 0;}
此算法还是不能解决大量素数情况,如果超过1e5的素数,就会很慢,本人想可以将大数据分解,使用多线程,这样应该可以的。
0 0
- 试探究一种查找素数算法
- 试探算法
- 试探算法
- 试探算法
- 素数查找算法
- 1.8 试探法算法
- 算法:回溯(试探)算法
- ZOJ2723 Semi-Prime【素数筛选+试探法】
- 一种素数判定算法的数学证明
- 编程算法之试探法
- 试探
- 基础算法(八) --- 试探法
- 筛法:一种高效求解素数表的算法
- 查找素数
- 面试:字符串集合 查找包含算法 的素数方案
- 查找素数的Eratosthenes(筛子)算法终止条件解释
- 回朔算法(试探算法)-彩票号码组合
- 字符串查找匹配算法的一种Java实现
- Java集合框架面试问题集锦
- HDU 2377 基础dijkstra,spfa算法
- Django学习笔记(六)Django上传文件
- 拓扑排序(AOV)---判断图中是否有环---《数据结构》严蔚敏
- OC语言特点
- 试探究一种查找素数算法
- TCP协议中的三次握手和四次挥手(图解)
- Java fast-fail机制
- leetcode Single Number & Single Number ||
- 【HDU】4908 BestCoder Sequence 预处理
- 架构经验系列文章索引
- 有序链式队列
- [BetterExplained]为什么你应该(从现在开始就)写博客
- init.d 开机启动的配置