HDU 5750 数学题
来源:互联网 发布:广告中的女性形象知乎 编辑:程序博客网 时间:2024/06/08 02:06
随便推导下, 令y=xd, 如果d是y的maximum positive proper divisor, 显然要求x是y的最小质因子. 令mp(n)表示n的最小质因子, 那么就有x≤mp(d), 同时有y<n, 那么x≤⌊dn−1⌋. 于是就是计算有多少个素数x满足x≤min{mp(d),⌊dn−1⌋}.
当d比较大的时候, ⌊dn−1⌋比较小, 暴力枚举x即可. 当d比较小的时候, 可以直接预处理出答案. 阈值设置到106∼107都可以过.
#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
- HDU 5750 数学题
- HDU 4024数学题
- HDU 2048 简单数学题
- HDU-1050 数学题
- HDU 1597 数学题
- hdu 1221 数学题
- hdu 2178 (数学题)
- hdu 1722 Cake 数学题
- HDU 1717 数学题
- HDU 1700 数学题
- hdu-4466-Triangle 数学题
- hdu 1021 数学题
- hdu 4627 水数学题
- HDU 1141(数学题)
- HDU 3215 数学题
- hdu 2832(数学题)
- HDU 1418 抱歉【数学题】
- HDU 1017 简单数学题
- 下载,更新及删除文件(以图片为例)
- UI常用控件的使用方法<UIWidgetTest>
- Hessian RPC示例和基于Http请求的Hessian序列化对象传输
- 数据结构学习笔记之队列结构
- 日结问题解决思路和方式
- HDU 5750 数学题
- IOS UI篇- 关于状态栏的相关设置(UIStatusBar)
- 百度快速排名的七大谎言
- 摄像机摄标定靶标
- JAVA 对象拷贝
- hdoj5813【构造】
- PHP安全编程之跨站脚本攻击的防御
- 《TCP/IP详解 卷1:协议》 读书笔记 第5章 RARP:逆地址解析协议
- C++类型转换详解--const_cast