zoukankan      html  css  js  c++  java
  • hdu 5750

    AC:

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #define maxn 100005
    using namespace std;
    bool check[maxn];
    int pr[maxn / 5], mn[maxn];
    int tt[maxn];
    int tot;
    int T;
    void euler() {
        memset(check,0,sizeof(check));
        tot=0;
        //x=1时的函数值 
        for(int i=2;i<maxn;i++) {
            if(!check[i]) {
                pr[++tot]=i;
                mn[i] = i;
                tt[i] = 1;
                //质数函数值 
            }
            for(int j=1;j<=tot;j++) {
                if(i*pr[j]>maxn) break;
                check[i*pr[j]]=1;
                
                mn[i*pr[j]] = pr[j];
                    
                if(i%pr[j]==0) {
                    break;
                } 
            }
        } 
    }
    int main()
    {
        euler();
        tt[0] = 0;
        for (int i = 1; i < maxn; ++ i) tt[i] += tt[i - 1];            //预处理出小于i的素数的个数 
        scanf("%d", &T);
        while (T --)
        {
            int n, d, ans;
            scanf("%d%d", &n, &d); n --;
            if (d >= maxn)
            {
                ans = n / d;
                for (int i = 1; pr[i] < ans; ++ i)
                    if (d % pr[i] == 0) {ans = pr[i]; break;}
                printf("%d
    ", tt[ans]);
            }
            else printf("%d
    ", tt[min(n / d, mn[d])]);
        }
    }

    几乎一模一样但WA:

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #define maxn 100005
    using namespace std;
    bool isprime[maxn];
    int pr[maxn / 5], mn[maxn];
    int tt[maxn];
    int tot;
    int T;
    void euler() {
        memset(isprime,1,sizeof(isprime));
        tot=0;
        //x=1时的函数值 
        for(int i=2;i<maxn;i++) {
            if(isprime[i]) {
                pr[++tot]=i;
                mn[i] = i;
                tt[i] = 1;
                //质数函数值 
            }
            for(int j=1;j<=tot;j++) {
                if(i*pr[j]>maxn) break;
                isprime[i*pr[j]]=0;
                
                mn[i*pr[j]] = pr[j];
                    
                if(i%pr[j]==0) {
                    break;
                } 
            }
        } 
    }
    int main()
    {
        euler();
        tt[0] = 0;
        for (int i = 1; i < maxn; ++ i) tt[i] += tt[i - 1];            //预处理出小于i的素数的个数 
        scanf("%d", &T);
        while (T --)
        {
            int n, d, ans;
            scanf("%d%d", &n, &d); n --;
            if (d >= maxn)
            {
                ans = n / d;
                for (int i = 1; pr[i] < ans; ++ i)
                    if (d % pr[i] == 0) {ans = pr[i]; break;}
                printf("%d
    ", tt[ans]);
            }
            else printf("%d
    ", tt[min(n / d, mn[d])]);
        }
    }
  • 相关阅读:
    常用JSR-303数据校验
    SpringBoot配置文件及自动配置原理
    SpringBoot自动装配原理
    Centos安装TensorFlow和Keras
    Batch梯度下降
    梯度下降法的注意点
    读取流量
    Linux开机启动服务
    Shell分割字符得到数组
    Linux下无图形界面安装Matlab
  • 原文地址:https://www.cnblogs.com/zhangjialu2015/p/5700331.html
Copyright © 2011-2022 走看看