题目链接:Problem - 1263C - Codeforces
题意:给定t组数据每组一个n,求出n/k(k 任意)向下取整有几种数,升序输出这几种数 (数据范围 1≤n≤10^9)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
set<int> se;
for(int i = 1; i*i <= n; i++)
{
se.insert(i);//默认升序排序
se.insert(n/i);
}
cout << se.size() << endl;
for(auto it : se) cout<< it << " " ;
cout << endl;
}
return 0;
}
二分查找方法:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
ll r=n,l=1;
vector<ll> v;
v.push_back(0);
v.push_back(1);
while(r!=1)
{
while(l<= r)
{
ll mid = r + l >>1;
if(n/mid<=v.back())
r = mid-1;
else if(n/mid>v.back())
l = mid+1;
}
v.push_back(n/r),l=1;
}
cout<<v.size()<<endl;
for(int i = 0; i<v.size() ; i++)
cout<<v[i]<<" ";
cout<<"\n";
}
return 0;
}