数论之————素数

素数又叫质数,一个数除了1和他本身没有其他因子的叫素数。

最一般的判断素数写法:
bool prime(int x)
{
   if(x<=1) return false;
   for(int i=2;i<x;i++)
   {
     if(x%i==0)
     return false;
   }
   return true;
}
快点的n开平方的复杂度
bool prime(int x)   //这是开平方的写法,减小了查询范围。
{
  if(x<=1) return false;
  for(int i=2;i<=sqrt(x)+0.5;i++)
  {
     if(x%i==0)
     return false;
  }
  return true;
}

bool prime(int x)   //这是乘的写法,让i相乘去和x比较
{
  if(x<=1) return false;
  for(int i=2;i*i<x;i++)
  {
     if(x%i==0)
     return false;
  }
  return true;
}
如果让求1~n内的所有素数怎么快速高效求出呢?

这就需要埃式筛选,简称埃筛。
代码:

const int MAX_N=1e5;
int prime[MAX_N];   //记录素数
bool isprime[MAX_N];    //为true表示i为素数
void sieve(int n)
{
    int p=0;
    for(int i=0;i<=n;i++) isprime[i]=true;    //初始化
    isprime[0]=isprime[1]=false;
    for(int i=2;i<=n;i++)
    {
        if(isprime[i])
        {
            prime[p++]=i;
            for(int j=2*i;j<=n;j+=i)     //如果i是素数,那么i的倍数都不是素数
            isprime[j]=false;       
        }
    }
}

求n的质因子

int m[1000];
void init(int n)  //N的质因子打表
{
  int k=0;
    for(LL i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            m[k++]=i;
            while(n%i==0)
                n/=i;
        }
    }
    if(n>1)
        m[k++]=n;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值