zoukankan      html  css  js  c++  java
  • hud 5750 Dertouzos

    Dertouzos

    Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
    Total Submission(s): 1415    Accepted Submission(s): 443


    Problem Description
    A positive proper divisor is a positive divisor of a number n, excluding n itself. For example, 1, 2, and 3 are positive proper divisors of 6, but 6 itself is not.

    Peter has two positive integers n and d. He would like to know the number of integers below n whose maximum positive proper divisor is d.
     
    Input
    There are multiple test cases. The first line of input contains an integer T (1T106), indicating the number of test cases. For each test case:

    The first line contains two integers n and d (2n,d109).
     
    Output
    For each test case, output an integer denoting the answer.
     
    Sample Input
    9 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 100 13
     
    Sample Output
    1 2 1 0 0 0 0 0 4
     
    Source
     

    一:直接暴力,这种方法是存在缺点的,可能会被卡数据。

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    const int maxx=100005;
    bool flag[maxx];
    int prime[maxx];
    int main(){
        int cnt=0;
        for(int i=2;i<maxx;i++){
            if(!flag[i]){
                for(int j=i<<1;j<maxx;j+=i){
                    flag[j]=1;
                }
                prime[cnt++]=i;
            }
            
        }
    //    for(int i=0;i<100;i++) cout<<prime[i]<<endl;
        int t;
        scanf("%d",&t);
        int n,d;
        while(t--){
            scanf("%d%d",&n,&d);
            int ans=0;
            for(int i=0;i<=cnt-1&&prime[i]<=d&&prime[i]*d<n;i++){
                if(d%prime[ans]==0){
                    break;
                }
                ans++;
            }
            if(prime[ans]>d||prime[ans]*d>=n);
            else ans++;
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code

    二、官方题解

    Dertouzos

    随便推导下, 令y=xdy=xd, 如果dd是yy的maximum positive proper divisor, 显然要求xx是yy的最小质因子. 令mp(n)mp(n)表示nn的最小质因子, 那么就有x le mp(d)xmp(d), 同时有y < ny<n, 那么x le lfloor frac{n-1}{d} floorxdn1​​⌋. 于是就是计算有多少个素数xx满足x le min{mp(d), lfloor frac{n-1}{d} floor}xmin{mp(d),dn1​​}.

    dd比较大的时候, lfloor frac{n-1}{d} floordn1​​⌋比较小, 暴力枚举xx即可. 当dd比较小的时候, 可以直接预处理出答案. 阈值设置到10^6 sim 10^7106​​107​​都可以过.

  • 相关阅读:
    轻节点如何验证交易的存在
    梯度爆炸/消失与初始化参数
    归一化能够加速训练的原因
    正则化可以防止过拟合的原因
    关于周志华《机器学习》中假设空间规模大小65的计算
    linux学习0001
    目标检测算法
    opencv安装与卸载
    前端学习02
    前端学习01
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/5703153.html
Copyright © 2011-2022 走看看