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])]);
        }
    }
  • 相关阅读:
    Java本周总结1
    大一学期总结
    十二周编程作业
    第十一周编程总
    第十周作业
    第九周作业
    第八周编程作业
    第七周编程作业
    Hibernate异常:IllegalArgumentException
    org.hibernate.id.IdentifierGenerationException: Hibernate异常
  • 原文地址:https://www.cnblogs.com/zhangjialu2015/p/5700331.html
Copyright © 2011-2022 走看看