c语言求素数以及改进算法
代码需要使用c99编译
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//是否为素数
//从2到x-1测试是否可以整除
//时间复杂度O(n-2),n趋向正无穷
int isPrime(int x)
{
int ret = ;
for(int i = ; i < x; i++)
{
if(x % i == )
{
ret = ;
break;
}
}
return ret;
} //除了2以外,所有的偶数都不是素数,从3到x-1,每次加2
//x为偶数时间复杂度O((n-3)/2+1)
//x很大时时间复杂度接近于(n/2)
int isPrime2(int x)
{
int ret = ;
if(x == || (x % == && x != ))
ret = ; for (int i = ; i < x; i += )
{
if( x % i == )
{
ret = ;
break;
}
} return ret;
} //无须到x-1,到sqrt(x)
//时间复杂度O(Log2n) 即sqrt(x)
int isPrime3(int x)
{
int ret = ; if(x == || x % == && x != )
ret = ;
for(int i = ; i < sqrt(x); i += )
{
if( x % i == )
{
ret = ;
break;
}
} return ret;
} //判断是否能被已知的且<x的素数整除
int isPrime4(int x, int knownPrimes[], int numberOfKnownPrimes)
{
int ret = ;
int i; for( i = ; i < numberOfKnownPrimes; i++)
{
if (x % knownPrimes[i] == )
{
ret = ;
break;
}
} return ret;
} int main()
{
const int number = ;
int prime[number] = {};
int count = ;
int i = ; while( count < number )
{
if(isPrime4(i ,prime, count))
{
prime[count++] = i;
}
i++;
} for( i = ; i < number; i++)
{
printf("%d",prime[i]);
if( (i + ) % ) printf("\t");
else printf("\n");
}
return ;
}
c语言求素数以及改进算法的更多相关文章
- C语言求素数的算法
前言 最后一次是出了素数的问题C语言解决题目(面试),当时用了最粗暴的算法.回来细致參考资料,事实上答案有非常多种: 1,小学生版本号: 推断 x 是否为质数,就从 2 一直算到 x-1. stati ...
- c语言-求完全数的一个算法
#include<iostream> #include<math.h> using namespace std; int main() { int n,i,j=0,k,a[10 ...
- 蓝桥杯 算法训练 Torry的困惑(基本型)(水题,筛法求素数)
算法训练 Torry的困惑(基本型) 时间限制:1.0s 内存限制:512.0MB 问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7……这样的数叫做质数.Torry突 ...
- c语言求回文数的三种算法的描述
c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...
- 转载 筛子算法之golang实现求素数解析
package main import "fmt" // Send the sequence 2, 3, 4, ... to channel 'ch'. func generate ...
- 【转】C语言快速幂取模算法小结
(转自:http://www.jb51.net/article/54947.htm) 本文实例汇总了C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速 ...
- 如何写出高质量的Python代码--做好优化--改进算法点滴做起
小伙伴你的程序还是停留在糊墙吗?优化代码可以显示程序员的素质欧! 普及一下基础了欧: 一层for简写:y = [1,2,3,4,5,6],[(i*2) for i in y ] 会输出 ...
- c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode
#include <stdio.h> #include <math.h> #include <string.h> char explode( char * str ...
- 数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test
Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29046 Accepted: 7342 Case ...
随机推荐
- kotlin字符串比较&空值处理&when表达式
字符串比较: 字符串的比较也是实际中比较常见的,下面来看下它的比较跟java中有啥不同,下面走起! 如我们所预期,其结果: 下面再来: 如果是java,结果肯定是为false,因为"==&q ...
- TCP协议之网络延时
影响TCP 网络时延的因素硬件速度网络和服务器的负载请求和响应报文的尺寸客户端和服务器之间的距离TCP 协议的技术复杂性TCP协议产生的时延TCP 连接建立握手:TCP 慢启动拥塞控制:数据聚集的 N ...
- GenericJDBCException: could not execute statement 错误解决
"message":"could not execute statement; nested exception is org.hibernate.exception.G ...
- 《深入理解Java虚拟机》之(一、内存区域)
一.java的体系构成: Java的技术体系主要由支撑java程序运行的虚拟机.提供各种开发领域接口支持的java api.java编程语言及许多第三方java框架(如Spring .Struts等) ...
- C#新增按钮
代码亲测可用,似乎不需要“ADD”,如下:form_load段:for (int i = 0; i < 10; i++){btn = new Button();btn.Parent = this ...
- Bootstrap-轮播图-No.7
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 洛谷-P3796-AC自动机加强版
链接: https://www.luogu.org/problem/P3796 题意: 有NN个由小写字母组成的模式串以及一个文本串TT.每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本 ...
- hdu 6074 Phone Call
题 O∧O http://acm.hdu.edu.cn/showproblem.php?pid=6074 2017 Multi-University Training Contest - Team 4 ...
- QT5 网络通讯
QT5 TCP网络通讯 服务器与客户端建立连接listen() - connectToHost(); 触发newPendingConnect信号 实时数据通讯write(); read(); 触发 ...
- HDOJ 4858 项目管理 ( 只是有点 莫队的分块思想在里面而已啦 )
题目: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 题意: 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! ...