如何求n的阶乘的约数?

学术版

@[MC方块人](/user/199330) ……您好棒啊
by FZzzz @ 2019-12-13 21:44:10


@[MC方块人](/user/199330) 是不是在您眼中什么东西只要一顿爆算算出来就可以啊?
by FZzzz @ 2019-12-13 21:44:47


@[MC方块人](/user/199330) 您可能不清楚 $1000!$ 是个什么级别的数 /cy
by yurzhang @ 2019-12-13 21:45:35


@[MC方块人](/user/199330) 哦,因数个数定理
by qbu666666 @ 2019-12-13 21:49:10


就是因数个数定理啊,分解1~1000的质因数,开个桶统计一下就完事了,好像n开到1e5也没问题?
by smarthehe @ 2019-12-13 21:55:23


@[_zzx_0826_](/user/182172)
by smarthehe @ 2019-12-13 21:56:33


@[smarthehe](/user/103732) 举个例子行吗?
by _zzx_0826_ @ 2019-12-13 22:17:14


比如求 6! 1 = 2 = $2^1$ 3 = $3^1$ 4 = $2^2$ 5 = $5^1$ 6 = $2^1 * 3^1$ 总共是 $2^4 * 3^2 * 5^1$ 因数个数定理 $(4+1)(2+1)(1+1)=30$
by smarthehe @ 2019-12-13 22:55:49


@[_zzx_0826_](/user/182172)
by smarthehe @ 2019-12-13 22:55:54


@[smarthehe](/user/103732) 那这份代码哪儿出问题了呢? ```cpp #include<bits/stdc++.h> #define ll long long using namespace std; const int mod = 1e9 + 7; ll n,vis[1005]; ll ans; int main() { scanf("%lld",&n); for(int i=1;i<=n;i++) { int x = i; for(int j=2;j * j <= i;j++) { while(x % j == 0) { vis[j]++; x /= i; } } if(x > 1)vis[x]++; } ans = 1; for(int i=1;i<=1000;i++) { if(vis[i])ans = (ans * (vis[i] + 1)) % mod; } printf("%lld",ans % mod); return 0; } ```
by _zzx_0826_ @ 2019-12-14 09:14:59


上一页 | 下一页