HDU 5750 数学题

来源:互联网 发布:广告中的女性形象知乎 编辑:程序博客网 时间:2024/06/08 02:06

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

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

#include<bits/stdc++.h>#define LL long long#define bug puts("*********")using namespace std;const int N=1100000;bool vis[N];int num;int sum[N];int prim[N];void init(){    int m=1000000;    memset(vis,1,sizeof(vis));    vis[0]=0;    vis[1]=0;    for(int i=2;i<=1000;i++){        if(vis[i]){            for(int j=i*i;j<=m;j+=i){                vis[j]=0;            }        }    }    num=0;    for(int i=1;i<=1000000;i++){        if(vis[i]){            prim[num++]=i;        }    }}int main(){    int t;    int n,m;    num=0;    init();    while(~scanf("%d",&t)){            ///必须满足 使m为最大约数(除了本身)             ///就必须满足y=a*m  a一定<= m的最小质因子,否则就不能满足上面的条件了            ///同时还要满足 y< n  即 y<=n-1 即a<= (n-1)/m             ///上述范围取最下即可        while(t--){            scanf("%d%d",&n,&m);            int d=(n-1)/m;            int a=100000000;///m的最小质约数            for(int i=0;;i++){                if(prim[i]>d)break;                if(m%prim[i]==0){                    a=prim[i];break;                }            }           int cnt=0;            for(int i=0;prim[i]<=a&&prim[i]<=d;i++){                cnt++;            }            printf("%d\n",cnt);        }    }    return 0;}


0 0
原创粉丝点击