A Hard Problem
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A Hard Problem相关的知识,希望对你有一定的参考价值。
题意:
给定一个n,要求找到最小的正数k,使得在集合T中任意选K个数,其中存在两个不同的u和v,u是v的因子
题解:
一开始想偏了,往质因数方向想了,然后因为1e9的以内的质数无法求而放弃
这个题其实很简单,我们想:对于一个数n,离他最近的因子(不考虑本身)就是n/2,也就说n,n-1,n-2…,n/2+1,这些数两两之间不存在因子关系,因为n最近的都到n/2,所以k最小就是(n+1)/2+1,n除以2向上取整+1,因为必须+1才保证正好存在因子关系
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e8+9;
typedef long long ll;
map<int,int>tag;
map<int,int>Pri;
map<int,int>ans;
int tot=0;
void prime()
{
tag[1]=tag[0]=1;
int N=100000;
for(ll i=2;i<=N;i++)
{
if(!tag[i])Pri[++tot]=i;
ans[i]=tot+1;
for(ll j=1;j<=tot&&i*Pri[j]<=N;j++)
{
tag[i*Pri[j]]=1;
if(i%Pri[j]==0)break;
}
}
}
int main(){
int t;
cin>>t;
//prime();
int q=1;
while(t--)
{
int n;
cin>>n;
cout<<(n+1)/2+1<<endl;
//cout<<"q="<<ans[++q]<<endl;
}
return 0;
}
以上是关于A Hard Problem的主要内容,如果未能解决你的问题,请参考以下文章
Codeforce 687A. NP-Hard Problem
UVALive - 5107 - A hard Aoshu Problem