求n以内的最大素数,若n最大为21亿
来源:互联网 发布:sqlserver is null 编辑:程序博客网 时间:2024/05/01 08:28
网上搜了很久有几个特别好的没看懂
现在只能打出我能看懂的
主要思路就是:
1:若n不为素数,则在sqrt(n)内一定有一个n的因子
2:利用算法将2到sqrt(n)中的2,3,5的倍数去掉,减少了n/10*3的时间复杂度
#include<stdio.h>#include <math.h>bool is_sushu(long long n);int main(){long long n;bool flag ;while(true){ scanf("%I64d",&n);while(n--){flag =is_sushu(n);if(flag == true)break;}printf("%I64d\n",n);}} bool is_sushu(long long n){if(n==3||n==5||n==2)return true;if(n%2==0 || n%3==0 || n%5==0)//排除掉2,3,5的倍数 return false;long long c = 7;long long Cmax = (long long) sqrt(n);//如果n为素数则sqrt(n)内必定存在一个它的因子while(c<Cmax)//通过下列的判断将2,3,5的倍数直接排除掉,减少循环的次数 {if(n%c==0)return false;c+=4;//第一次c为11 if(n%c==0)return false;c+=2;// 13 if(n%c==0)return false;c+=4;//17if(n%c==0)return false;c+=2;//19if(n%c==0)return false;c+=4;//23if(n%c==0)return false;c+=6;//29if(n%c==0)return false;c+=2;//31 if(n%c==0)return false;c+=6;//37//下一个应该是41,又是+4,//下一个应该是43,又是+2//……………………虽然不知道为什么会出现这种循环但事实就是这样 } return true;//据说这个的时间复杂度为o((sqrt(n)/10)*7) }
//下面的是我用普通的方式写的,发现几分钟都运行不出来bool is_sushu(long long n){long long i = 1;for(i =2;i<n;i++){if(n%i==0)return false;}return true;}
0 0
- 求n以内的最大素数,若n最大为21亿
- 计算n以内最大素数
- 5-36 求n以内最大的k个素数以及它们的和 (20分)
- PTA 求n以内最大的k个素数以及它们的和
- pta 习题集 5-14 求n以内最大的k个素数以及它们的和
- PTA教辅 求n以内最大的k个素数以及它们的和
- 求n以内最大的k个素数以及它们的和
- 求N以内的素数。
- 【ZOJ 1562和 BZOJ 1053】【反素数】【求n以内的因子最多的那个数(即不超过n的最大反素数)】
- 求素数,给你一个n,输出n以内的素数
- 求正整数n以内的所有素数
- 求N以内的所有素数
- 求n以内的素数个数问题
- 素数标记法求n以内所有的素数
- 算法笔试题(一):求数字N以内最大质数
- 判断1~N内最大的素数
- 求N以内的所有素数的个数
- LabView 求整数N以内的所有素数
- Android多线程多进程学习网址
- 图像处理之简化色彩(含OpenCV代码)
- int64
- 我的第二次RNAseq分析
- LCD驱动程序(四)测试
- 求n以内的最大素数,若n最大为21亿
- ConcurrentHashMap复合操作问题
- 做正确的事
- MySQL数据库事务隔离级别
- 04. Oracle 11g 数据库关闭与启动
- HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活【多重背包】
- 触摸屏驱动之概念介绍
- Android——蓝牙利用RSSI进行距离测算
- 299. Bulls and Cows