核心代码:从1开始枚举,因为约数成对出现,所以枚举一半即可,复杂度为O(根号n)
for(int i=1;i<=x/i;i++) { if(x%i==0) { ans.push_back(i); if(x/i!=i) ans.push_back(x/i); } }
代码:
#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define LL __int128 using namespace std; const int N=2e5+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f; int a[N],b[N],c[N],pre[N]; signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n;cin>>n; while(n--) { int x;cin>>x; vector<int>ans; for(int i=1;i<=x/i;i++) { if(x%i==0) { ans.push_back(i); if(x/i!=i) ans.push_back(x/i); } } sort(ans.begin(),ans.end()); for(auto i:ans) cout<<i<<' '; cout<<endl; } return 0; }
试除法求约数--数学模板
最新推荐文章于 2024-11-05 21:58:11 发布