数论-判断素数,输出素数,最短时间
2017-07-24 09:24
155 查看
判断一个数是不是素数:
筛法求素数(线性筛法):
#include<stdio.h>
int array[100005];
int reserve[100005],t;
int main()
{
for(int i=2;i<100005;i++) array[i]=1;
for(int i=2;i<100005;i++) {
if(array[i]) reserve[t++] = i;
for(int j=0;j<t&&i*reserve[j]<100005;j++) {
array[i * reserve[j]]=0;
if(i % reserve[j]==0)
break;
}
}
for(int i=0;i<100;i++)
printf("%d ",reserve[i]);
}
#include<stdio.h> #include<math.h> int prime1(int x)//时间复杂度是O(√n) { if(x <= 1) return 0; double n = x+0.5; for(int i = 2; i <= sqrt(n); i++) if(x%i == 0) return 0; return 1; } int prime2(int x)//时间复杂度是O(√n) { if(x <= 1) return 0; for(long long int i = 2; i*i <= x; i++) if(x%i == 0) return 0; return 1; } int main() { int a,b; scanf("%d %d",&a,&b); prime1(a)?puts("YES"):puts("NO"); prime2(b)?puts("YES"):puts("NO"); return 0; }
筛法求素数(线性筛法):
#include<stdio.h>
int array[100005];
int reserve[100005],t;
int main()
{
for(int i=2;i<100005;i++) array[i]=1;
for(int i=2;i<100005;i++) {
if(array[i]) reserve[t++] = i;
for(int j=0;j<t&&i*reserve[j]<100005;j++) {
array[i * reserve[j]]=0;
if(i % reserve[j]==0)
break;
}
}
for(int i=0;i<100;i++)
printf("%d ",reserve[i]);
}
相关文章推荐
- 【OI之路】02数论算法-2素数判断
- 判断m-n之间有多少个素数,并输出所有素数。
- 数论之素数的判断
- 【程序6】判断101-200之间有多少个素数,并输出所有素数。
- 判断101-200之间有多少个素数,并输出所有素数。
- 题目:判断101-200之间有多少个素数,并输出所有素数。
- 判断素数、输出素数以及对称素数---C++
- 非常经典的JAVA编程题(判断101-200之间有多少个素数,并输出所有素数。)
- 判断101-200间的素数个数,输出这些素数以及个数
- 判断一个正整数是不是素数,时间复杂度为O(根号n)
- PHP判断素数,循环,筛选——默认可执行时间秒数,默认可执行空间。用来测试运行效率
- 数论 - 快速幂运算 --- (快速幂+素数判断、水题)
- 函数(输出乘法口诀、交换两个数、判断闰年、创建数组、判断素数)
- 判断10-105之间有多少个素数,并输出所有素数。
- [Java]练习题002: 判断101-200之间有多少个素数,并输出所有素数
- 题目:判断101-200之间有多少个素数,并输出所有素数。
- Java:判断101-200之间有多少个素数,并输出所有素数。
- 判断101-200之间有多少个素数,并输出所有素数
- 【程序2】判断101-200之间有多少个素数,并输出所有素数。
- Codeforces #270 A. Design Tutorial: Learn from Math(数论:素数判断)