hdu 5750 Dertouzos 素数

Dertouzos

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

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 (1≤T≤106), indicating the number of test cases. For each test case:

The first line contains two integers n and d (2≤n,d≤109).

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

/*
hdu 5750 Dertouzos 素数

problem:
求n里面最大约数(不包含自身)为d的个数

solve:
如果是最大约数,那么另一个数必定数质数. 所以就是求最大的质数x,满足 x*d<n
但是有可能d的最小质数比x小: 4000 1000  ---> x = 3.   但实际上当x = 3时, 3*1000 = 3000 = 2*1500
所以还要求d的最小质数,最较小的即可.

hhh-2016-08-29 16:46:41
*/
#pragma comment(linker,"/STACK:124000000,124000000")
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <math.h>
#include <queue>
#include <map>
#define lson  i<<1
#define rson  i<<1|1
#define ll long long
#define clr(a,b) memset(a,b,sizeof(a))
#define scanfi(a) scanf("%d",&a)
#define scanfl(a) scanf("%I64d",&a)
#define key_val ch[ch[root][1]][0]
#define inf 1e9
using namespace std;
const ll mod = 1e9+7;
const int maxn = 1000005;

int prime[maxn+100];
void get_prime()
{
    clr(prime,0);
    for(int i =2; i <= maxn; i++)
    {
        if(!prime[i]) prime[++prime[0]] = i;
        for(int j = 1; j <= prime[0] && prime[j] <= maxn/i; j++)
        {
            prime[prime[j]*i] = 1;
            if(i%prime[j] == 0) break;
        }
    }
}

int main()
{
    int T,n,d;
    int ans,tans;
    get_prime();
    scanfi(T);
    while(T--)
    {
        scanfi(n),scanfi(d);
        int limit = min(d,n/d);

        tans = ans = 0;
        if(prime[1] * d >= n)
        {
            printf("0\n");
            continue;
        }
        for(int i = 1; i <= prime[0]; i++)
        {
            if(d % prime[i] == 0)
            {
                ans = i;
                break;
            }
            else
            {
                if(prime[i]*d < n && prime[i+1]*d >= n)
                {
                    ans = i;
                    break;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

  

时间: 2024-10-19 00:02:52

hdu 5750 Dertouzos 素数的相关文章

HDU 5750 Dertouzos

Dertouzos Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 577    Accepted Submission(s): 160 Problem Description A positive proper divisor is a positive divisor of a number n, excluding n itse

HDU 5750 Dertouzos 简单数学

感悟:这又是zimpha巨出的一场题,然后04成功fst(也就是这题) 实际上还是too young,要努力增加姿势, 分析:直接枚举这些数不好枚举,换一个角度,枚举x*d,也就是d的另一个乘数是多少 显然  x<=min(d,(n-1)/d),x还得是质数,最后发现x必须小于d的最小因子 然后预处理10w以内的素数,然后每次先得到k=min(d,(n-1)/d),然后看d最小因子是否小于k 这题的关键就在找d的最小因子,我是暴力找的(然后碰上全是大素数就t了) 实际上当d是大素数的时候,k很小

HDU 2521 反素数

反素数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4238    Accepted Submission(s): 2456 Problem Description 反素数就是满足对于任意i(0<i<x),都有g(i)<g(x),(g(x)是x的因子个数),则x为一个反素数.现在给你一个整数区间[a,b],请你求出该区间的x使

ZOJ 2562 HDU 4228 反素数

反素数: 对于任何正整数x,起约数的个数记做g(x).例如g(1)=1,g(6)=4. 如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数. ZOJ 2562 反素数 因为写了POJ 2886的线段树,然后里面有反素数,以前没遇到过,所以先搞这两题普及一下知识再说. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&

【HDU 5750】Dertouzos(数学)

题目给定n和d,都是10的9次方以内,求1到n里面有几个数最大因数是d?1000000组数据.解:求出d的满足p[i]*d<n的最小质因数是第几个质数.即为答案. #include<cstdio> #define N 100002 int t,n,d,pr[N],p[N],num; int main(){ for(int i=2;i<N;i++)if(!pr[i]){ for(int j=i+i;j<N;j+=i) pr[j]=1; p[++num]=i; } scanf(&

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 its

七夕节 HDU - 1215 (唯一分解 素数筛法 因子之和加强版)

七夕节 HDU - 1215 题目链接:https://vjudge.net/problem/HDU-1215#author=0 题目: 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下: 数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6. 你想知道你的另一半吗? Input输入数据的第一行是一个数字T

HDU 4548——美素数

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4548 题解 #include<cstring> #include<iostream> using namespace std; const int n=1000005; int prime[1000005]; bool vis[1000005]; int cnt[1000005]; //记录到数字 j为止的美素数个数 void oula(){ //通过欧拉筛打表 int cnt=0; me

hdu 2521 反素数(打表)

反素数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5723    Accepted Submission(s): 3355 Problem Description 反素数就是满足对于任意i(0<i<x),都有g(i)<g(x),(g(x)是x的因子个数),则x为一个反素数.现在给你一个整数区间[a,b],请你求出该区间的x使