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])]);
        }
    }
  • 相关阅读:
    动态页面技术(JSP/EL/JSTL)
    JavaWeb核心之Servlet
    会话技术Cookie&Session
    待整理
    二进制中1的个数(python)
    矩形覆盖(python)
    变态跳台阶(python)
    跳台阶(python)
    斐波那契数列(python)
    旋转数组的最小数字(python/c++)
  • 原文地址:https://www.cnblogs.com/zhangjialu2015/p/5700331.html
Copyright © 2011-2022 走看看