A Hard Problem
生活随笔
收集整理的這篇文章主要介紹了
A Hard Problem
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何下载安装电脑版PR中的插件
- 下一篇: C - Digital Path 计蒜客