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;
}