码迷,mamicode.com
首页 > 其他好文 > 详细

线性筛数

时间:2018-08-12 23:37:14      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:线性筛   w3g   pmf   zju   wak   gps   aos   row   rri   

简介

线性筛数一般用于筛选素数,有时也可以用于求因数个数和因数和等,但是由于我太蒟了,所以不会,所以这里暂时不列出来。

筛选素数的方法有很多种,第一种是暴力求解法:

对于一个要判断是否是素数的数n,我们通过传统说明“n是素数,表示这个n不被n以内的任何数整除(除了1)”来求,把i=2~n全部枚举一遍,也就是:

#include<stdio.h>
int main()
{
  int i,n;
  while(scanf("%d",&n)==1)
  { for(i=2;i<n;i++)
         if(n%i==0)    break; 
    if(i==n)    printf("YES\n");
    else           printf("NO\n");
  }
}

 第二种方法,也就是比较常见的枚举+优化方法,因为n的质因数中必定有一个是≤√n所以

#include<stdio.h>
#include<math.h>
int main()
{ int i,n,x;
  while(scanf("%d",&n)==1)
  { x=(int)sqrt(n);
    for(i=2;i<=x;i++)
         if(n%i==0)    break; 
    if(i>x)    printf("YES\n");
    else           printf("NO\n");
  }
}

 but!!!

这种方法的速度虽然会快一点,但是还没有到我们想象中的那样,所以还有什么优化的方法呢?

这时候我们就需要讲一个小故事了...

一个小故事

埃拉托斯特尼是一个古希腊数学家(古罗马?不知道,反正是个数学家了...),有一天,他非常无聊(所以发明了一个叫做线性筛数的东西)

 他就在沙地上用棍子画了一个表格,长成这样:

技术分享图片

 

线性筛数

标签:线性筛   w3g   pmf   zju   wak   gps   aos   row   rri   

原文地址:https://www.cnblogs.com/Wolfbeyond/p/9465389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!