点击跳转例题
根据二项式定理,我们求出每个质因子的个数,那么总共的约数个数就是:所有的质因子个数相乘,因为可以不取其中某个质因子,所以可以不选。那么结果就是每个质因子个数+1的乘积。#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]; int prime[N],cnt; bool st[N]; int sum[N]; //线性筛素数 void get_prime(int n) { for(int i=2;i<=n;i++) { if(!st[i])prime[cnt++]=i; for(int j=0;prime[j]<=n/i;j++) { st[prime[j]*i]=true; if(i%prime[j]==0)break; } } } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); get_prime(2e5); int n;cin>>n; //枚举每个质数,求出它的所有质因子及其个数。 for(int i=1;i<=n;i++) { int x;cin>>x; unordered_map<int,int>mp; for(int i=0;i<cnt;i++) { int p=prime[i]; while (x%p==0) { mp[p]++; x/=p; } } if(x>1) mp[x]++; //答案。 int res=1; for(auto i:mp) { res=res*(i.second+1); } cout<<res<<endl; } return 0; }
KY3 约数的个数(计算机考研复试上机题)
最新推荐文章于 2024-07-24 14:05:37 发布
该篇文章介绍了如何使用C++编程语言,结合二项式定理和线性筛素数算法,计算给定整数的质因子组合的约数个数,通过遍历质数并统计每个质因子的个数来得到结果。
摘要由CSDN通过智能技术生成