在分解质因数的时候,我们只需要枚举一半的约数即可,因为约数是成对存在的,所以复杂度为O(根号n)。
核心代码:
void solve(int x) { for(int i=2;i<=x/i;i++) { if(x%i==0) { int cnt=0; while(x%i==0) { x/=i; cnt++; } cout<<i<<' '<<cnt<<endl; } } if(x>1) cout<<x<<' '<<1<<endl; }
#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]; void solve(int x) { for(int i=2;i<=x/i;i++) { if(x%i==0) { int cnt=0; while(x%i==0) { x/=i; cnt++; } cout<<i<<' '<<cnt<<endl; } } if(x>1) cout<<x<<' '<<1<<endl; cout<<endl; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n;cin>>n; while(n--) { int x;cin>>x; solve(x); } return 0; }
分解质因数--数学模板
最新推荐文章于 2024-07-24 19:35:30 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)