算法的核心所在
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int mod=1e9+7;
int main()
{
int n;
cin>>n;
unordered_map<int,int> primes;//映射函数
while(n--)
{
int x;
scanf("%d",&x);
for(int i=2;i<=x/i;i++)
while(x%i==0)
{
primes[i]++;
x/=i;//方便求得约数的数量
}
if(x>1) primes[x]++;//x的最大公约数可能大于sqrt(x);
}
long long res=1;
for(auto p:primes) res=res*(p.second+1)%mod;//将统计出来的数按照由图中公式所得出来的结论得出答案
printf("%lld\n",res);
return 0;
}
进一步详细解释了,顶上去
orz
牛
各位佬儿,ans = ans*(i.second + 1) % (1e9 + 7)为什么不对呢?
不能直接用 % (1e9 + 7)
用%1000000007
为什么不能这样用呀
因为他是double
一眼就懂
while循环是求质因数吧,求约数i应该从1开始枚举?
那就无限循环了 无限个1
这是求约数个数,就是统计各个质因子的指数个数,然后通过数学推论来求
map这个是怎么存数值进去的呀
建议上网查一下map的用法 语法知识不太牢的话可以看看语法课
马上懂了
棒
看到你的原理图马上懂了
终于懂了