题意:给出b 求lcm(a,b)/a 在b从1-1e18有多少个不同得结果
思路lcm*gcd=a*b 转换成 b/gcd(a,b)
也就是看gcd(a,b)有多少个值 可以把b 由唯一分解定理 分解一下 然后组合一下各个因子就是由多少种了
注意: 因为唯一分解定律都是素数 思考一下可以 知道 不可能有两种不同的组合方式得到同一个 结果 所以可以放心得用
#include<bits/stdc++.h> using namespace std; const int maxn=100000; long long prime[maxn],vis[maxn*10]; long long k=0; void prime1(){ memset(vis,0,sizeof(vis)); for(long long i=2;i<=maxn;i++)if(!vis[i]){ prime[k++]=i; for(long long j=i*i;j<=maxn;j+=i)vis[j]=1; } } int main(){ long long b; prime1(); cin>>b; long long z=b; long long ans=0; long long sum=1; for(long long i=0;i<k&&prime[i]*prime[i]<=z;i++){ ans=0; while(b%prime[i]==0){ ans++; b/=prime[i]; } sum*=(ans+1); } if(b>1)sum*=(1+1); cout<<sum<<endl; return 0; }