zoukankan      html  css  js  c++  java
  • cogs 2056. 无平方因子数

    2056. 无平方因子数

    ★☆   输入文件:non.in   输出文件:non.out   简单对比
    时间限制:1 s   内存限制:256 MB

    【题目描述】

    给出正整数n,m,区间[n,m]内的无平方因子数有多少个?

    整数p无平方因子,当且仅当不存在k>1,使p是k^2的倍数,1<=n<=m<=10^12,m-n<=10^7

    【输入格式】

    两个整数n,m

    【输出格式】

    [n,m]间的无平方因子数的个数

    【样例输入】

    1 5

    【样例输出】

    4

    【提示】

    在此键入。

    【来源】

    刘汝佳《入门经典》

    思路:对不超过根号 m的所有的素数p,筛掉区间[n,m]内的p2的所有的倍数。所以跑两边筛法。

    错因:筛p2的倍数时,筛法的常数过大,TLE两个点。


    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    long long n,m;
    int len,tot,num;
    bool v[50000001],vis[1000001];
    long long prime[1000001];
    void eratos(){
          memset(vis,true,sizeof(vis));  
          vis[1]=false;
        for(int i=2;i<=len;i++){
            if(vis[i])    prime[++tot]=i;
            for(int j=1;prime[j]*i<=len;j++){
                vis[i*prime[j]]=false;
                if(i%prime[j]==0)    break;
            } 
        }
    }
    int main(){
        freopen("non.in","r",stdin);
        freopen("non.out","w",stdout);
        scanf("%lld%lld",&n,&m);
        len=sqrt(m);
        eratos();
        for(int i=1;i<=tot;i++){
            long long now=prime[i]*prime[i];
            for(long long j=n/now*now;j<=m;j+=now)
                if(j>=n)    v[j-n]=1;
        }
        for(int i=0;i<=m-n;i++)
            if(!v[i])    num++;
        cout<<num;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    爬取卡通图片
    python 列表生成式
    python 装饰器
    python 协程 and 进程
    ssh登录缓慢问题
    解决 input 元素点击有蓝色边框的问题
    JavaScript面试题总结系列(九)
    JavaScript面试题总结系列(八)
    JavaScript面试题总结系列(七)
    JavaScript面试题总结系列(六)
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7528148.html
Copyright © 2011-2022 走看看