HDU 5750 Dertouzos(思路题)
来源:互联网 发布:群优化 编辑:程序博客网 时间:2024/05/22 14:24
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5750
题意:给定n、d,在(1,n)范围(不包括n)内寻找最大因子是d的总个数
分析:最大因子是d,那它一定是d的倍数,即在d的素数倍中寻找就行了。
n--; ans=min(n/m,m);ans=min(ans,b[m]);//b[m]表示m的最小素因子,即找小于等于ans的整数中有多少个素数即可.
注意当d不是素数的时候,这时就要找它的最小素因子。当时比赛的时候就卡在了这里,不知道怎么去找,错误的思路就是一直想方法存起来,但结果总是RE,后来发现直接暴力在素数中找也是可以的,并不会超时。
CODE:
#include<stdio.h>#include<algorithm>#include<iostream>#include<string.h>#include<stdlib.h>#include<math.h>#include<map>#include<queue>using namespace std;typedef long long LL;#define INF 0x3f3f3f3fconst int maxn=1000001;const int mod=1000006;bool p[maxn];int pos[maxn];int k=0;void init(){ memset(pos,0,sizeof(pos)); memset(p,true,sizeof(p)); p[0]=p[1]=false; for(int i=2; i<maxn; i++)//打表筛素数 { if(p[i]) { pos[k++]=i; for(int j=i+i; j<maxn; j+=i) p[j]=false; } }}int main(){ int t,n,m; k=0; init(); scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); if(m>=(n+1)/2)//如果m>(n+1)/2,就找不到最大素因子为m的数了 printf("0\n"); else//否则暴力寻找 { int ans=0; for(int i=0;;i++) { if(m*pos[i]>=n||m<pos[i]||m%pos[i]==0) { ans=i; break; } } if(m*pos[ans]>=n||m<pos[ans])//如果是这两个条件跳出,就多找了一个 ans--; printf("%d\n",ans+1); } } return 0;}
0 0
- HDU 5750 Dertouzos(思路题)
- hdu5750 Dertouzos (思路题)
- HDU 5750 Dertouzos(数论)
- hdu 5750 Dertouzos(数论)
- hdu 5750——Dertouzos(简单)
- hdu 5750 Dertouzos(数论:质数枚举)
- HDU 5750 Dertouzos
- hdu 5750 Dertouzos
- HDU-5750 Dertouzos
- HDU 5750 Dertouzos
- HDU 5750 Dertouzos
- Hdu 5750 Dertouzos
- HDU 5750 Dertouzos
- HDU 5750 Dertouzos
- HDU 5750 Dertouzos(数论)
- HDU 5750 Dertouzos (数论)
- HDU 5750 Dertouzos
- hdu-5750-Dertouzos-数学
- JS常用正则表达式
- SQL SERVER 基础知识
- [实验一] 顺序表的基本操作
- Android 7.0 PopupWindow 又引入新的问题,Google工程师也不够仔细么
- iOS 控制器跳转动画
- HDU 5750 Dertouzos(思路题)
- pwnable.kr [Toddler's Bottle]
- MySQL中的联合查询
- Spring Aop
- Spring MVC 的图片上传相关
- 推荐系统user-based和item-based协同过滤算法定性比较
- localStorage、sessionStorage、jquery_cookie
- 户外广告行业如何使出“洪荒之力”
- FAT32的几个问题