762A k-th divisor
2017-02-09 16:29
344 查看
题目链接:
http://codeforces.com/problemset/problem/762/A
题解:
算是简单题,需要注意的就是题目中给出的数据比较大,所以,我用的是折半处理的方法,只处理平方之前的数据,在用除法把剩下的数据给处理,这里还需要注意的是i*i==n,这里需要考虑一下。
代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e6+10;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;
ll num[maxn];
int main()
{
ll n,k;
while(cin>>n>>k)
{
met(num,0);
ll ans=-1;
ll m=sqrt(n);
ll cnt=0,len=0;
for(ll i=1;i<=m;i++)
{
if(n%i==0)
{
cnt++;
num[len++]=i;
}
if(cnt==k)
{
ans=i;
cout<<ans<<endl;
break;
}
}
ll temp=cnt;
if(m*m==n)
temp--;
if(ans==-1)
{
ll flag=0;
ll i;
for(i=len-1;i>=0;i--)
{
temp++;
if(temp==k)
{
flag=1;
break;
}
}
if(flag)
ans=n/num[i];
cout<<ans<<endl;
}
}
}
http://codeforces.com/problemset/problem/762/A
题解:
算是简单题,需要注意的就是题目中给出的数据比较大,所以,我用的是折半处理的方法,只处理平方之前的数据,在用除法把剩下的数据给处理,这里还需要注意的是i*i==n,这里需要考虑一下。
代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e6+10;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;
ll num[maxn];
int main()
{
ll n,k;
while(cin>>n>>k)
{
met(num,0);
ll ans=-1;
ll m=sqrt(n);
ll cnt=0,len=0;
for(ll i=1;i<=m;i++)
{
if(n%i==0)
{
cnt++;
num[len++]=i;
}
if(cnt==k)
{
ans=i;
cout<<ans<<endl;
break;
}
}
ll temp=cnt;
if(m*m==n)
temp--;
if(ans==-1)
{
ll flag=0;
ll i;
for(i=len-1;i>=0;i--)
{
temp++;
if(temp==k)
{
flag=1;
break;
}
}
if(flag)
ans=n/num[i];
cout<<ans<<endl;
}
}
}
相关文章推荐
- 题目1208:10进制 VS 2进制
- 解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题(转)
- HTML基础认识
- 数据模型分析
- 竞猜系统整体架构设计
- 在 Android 中 使用JNI
- 进阶篇:3.8)锻造件设计
- mysql--基准测试
- python数据分析准备(安装python和canopy用于科学计算)
- 滑动退出Activity的两种方法
- java垃圾回收机制GC所使用的算法
- 微信Web开发者工具,mac上面卡死解决办法
- TabLayout+ViewPager 懒加载
- maven(3)------maven构建web项目详细步骤
- Tornado,bootstrap文档链接
- textarea 内容分段,首行缩进
- linux一些网络命令
- 【推荐】Bootstrap相关优质项目
- python安装本地包
- spring cloud学习笔记(一):配置服务器搭建