• ACM-ICPC 2018 南京赛区网络预赛 J.Sum


    题目链接:https://nanti.jisuanke.com/t/30999

    大意,给你一个n,让你求这个数只能被两个非平方数相乘得到,问你从1到这个数的前缀和。

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 20000000+10
    int a[m`axn];
    int ans[maxn];
    int c[maxn];
    int vis[maxn];
    void prim()
    {
        int t=0;
        ans[1]=1;
        for(int i=2; i<maxn; i++)
        {
            if(vis[i]==0)
            {
                c[++t]=i;
                ans[i]=2;
            }
            for(int j=1; j<=t; j++)
            {
                int temp=c[j]*i;
                if(temp>=maxn)break;
                vis[temp]=1;
                if(i%c[j])ans[temp]=ans[i]*ans[c[j]];
                else
                {
                    int tp=c[j]*c[j];
                    if(i%tp==0)ans[temp]=0;
                    else ans[temp]=ans[temp/tp]*ans[1];
                    break;
                }
            }
        }
    }
    int main()
    {
        prim();
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        for(int i=1; i<maxn; i++)
        {
            ans[i]+=ans[i-1];
        }
        int T;
        cin>>T;
        while(T--)
        {
            int n;
            cin>>n;
            cout<<ans[n]<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    testng
    RF相关命令
    批处理bat相关
    VIM常用快捷键
    JAVA异常处理
    cucumber+selenium
    webDriver各版本对应
    python源码
    python之logging模块
    pywinauto进阶练习
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262935.html
Copyright © 2020-2023  润新知