zoukankan      html  css  js  c++  java
  • [数论][筛法求素数]约数

    题目描述

    定义p(n)为n大于1的最小约数。
    给出N,求p(2)+p(3)+...+p(N)的值。

    输入

    一个整数N。

    输出

    1个整数,表示所求的值。

    样例输入

    10
    

    样例输出

    28
    

    提示

    •对于30%的数据,N≤103
    •对于60%的数据,N≤103
    •对于100%的数据,2≤N≤107

    题目大意:略

    思路:简单模拟一下过程,就会发现很像筛法求素数的过程。

    先附上筛法求素数模板:

    #include<cstdio>
    #include<cstring>
    #define ll long long
    int n;//求1-n的素数
    bool prime[10000010];
     
    void primejudge(){
      memset(prime,true,sizeof(prime));
      prime[0]=prime[1]=false;
      for(ll i=2;i*i<=n;i++){
        if(prime[i]){
         for(ll j=i*i;j<=n;j=j+i){
          prime[j]=false;
         }
        }
      }
    }
     
    int main()
    {
        scanf("%d",&n);
        primejudge();//最终素数的判断结果储存在prime数组中
        return 0;
    }

    AC代码:

    #include<cstdio>
    #include<cstring>
    #define ll long long
    int n;
    ll ans=0;
    bool prime[10000010];
     
    void primejudge(){
      memset(prime,true,sizeof(prime));
      for(ll i=2;i<=n;i++){
        if(prime[i]){
         ans+=i;
         for(ll j=i*i;j<=n;j=j+i){
          if(prime[j]) ans+=i;
          prime[j]=false;
         }
        }
      }
      printf("%lld
    ",ans);
    }
     
    int main()
    {
        scanf("%d",&n);
        primejudge();
        return 0;
    }
    转载请注明出处:https://www.cnblogs.com/lllxq/
  • 相关阅读:
    学习笔记4
    学习笔记2
    学习笔记1
    树莓派与Arduino串口通信
    团队大作业第三周周报
    团队大作业第二周周报
    团队大作业第一周周报
    RTCSD_第三次作业
    RTCSD_第二次作业
    RTCSD_第一次作业
  • 原文地址:https://www.cnblogs.com/lllxq/p/8441105.html
Copyright © 2011-2022 走看看