- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565665 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174922
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
|
2019第十届蓝桥杯B组决赛题解第四题 7 f8 ^* ]2 M( @9 c. C* b2 K, I
+ j" N% A5 _4 v% p
题意: 寻找有100个约数的最小数* Y& C# o: x/ I" P* P
思路: 本质上就是用了素因子分解,假设分解出来的素因子有4种,分别有x1个,x2个,x3个,x4个,第i种因子可以选0个或者1个或者2个或者···或者xi个,那么因子总数为(x1+1)*(x2+1)*(x3+1)*(x4+1)+ Q, @7 q/ v/ M/ ], Y( S
0 _( x* o* q2 Y
结果:45360
; }& p) H/ @0 k5 {$ J. I
* B. c) q0 v; M代码:
. o, G" N# V8 n1 b" k `5 W+ }' @& ^2 m5 Y7 i) v: s4 ~- {# ^# o' J
#include<bits/stdc++.h>
\8 N) I) u4 Z* P. a#define mem(a,b) memset(a,b,sizeof(a)): @8 q G4 H3 x
using namespace std;
0 a! a* T, ~( z1 Y/ dtypedef long long ll;
' n; i" I8 t6 S# q& _, Bconst int inf = 0x3f3f3f3f;7 ?' q$ P, K6 R" y7 m) H
const int maxn = 3e5+55555;
6 Y& F3 i" d$ [' Gconst ll mod = 998244353;
- J% j+ W3 ~; }( o9 f) ?) ^0 [const double eps = 1e-7;9 _0 w$ F( X3 j
0 I# _$ U4 P; e5 {bool vis[123456];, t- p! r% ^9 s' s) X$ j) n8 V
vector<int>prime;
8 M5 a% ]9 }, F9 f/ j; w! W+ h- j
+ q# q8 [0 C2 C* hvoid init() { //素数筛6 d8 N' c+ V" ~! A
for(int i = 2;i<= 30000;i++) {! M. F: O9 ?1 H1 s0 O r
if(!vis) {" R+ V3 q& Q& d$ Q7 D9 r* v2 ?
for(int j = i*i;j<= 30000;j+= i) {
0 E1 t7 Y/ t2 S% e vis[j] = true;
( x: h: W A+ k; T: M; G }
/ ], J+ [1 K+ p# d1 q( t2 ?* s1 {; a/ S }
0 @, Y$ q% y' H6 Q/ R8 j) m' w }
& Q1 f0 v+ z+ U, {% _ for(int i = 2;i<= 2019;i++) {2 W" x) r$ v+ k: `! u8 p4 o
if(!vis) prime.push_back(i);
( a7 L/ n" }7 V2 T8 Q }1 k; [" }" E2 ^
return ;
( [; K" k$ J5 a; h% h}! O$ J, k6 L8 x
( J P9 c" j2 A ]7 J I# t
int cal(int x) { 4 b( l: R7 f; Q# {
int num[123];
6 D8 @5 ^. ~7 ~7 y |7 R# A/ g mem(num,0);
) v# o7 q# C5 _6 e, F: |
$ z2 n" n/ k5 a. g* k2 B int k = prime.size(),cnt = 0;9 l" G9 j% q, z
for(int i = 0;i< k;i++) { // 分解素因子
+ Y, I$ _. l" j if(x%prime == 0) {' }5 G* v6 {1 u4 H: ^/ w
cnt++;. D; l4 v' j8 Y% ]. \ u4 e* X! p
while(x%prime == 0) {, }9 ~0 O, o$ g P9 z% C
x/= prime;
( w! T% B5 [; | num[cnt]++;% \$ g* }7 R4 @1 L& l0 u) J. t: j" y
}
6 ~2 n; m9 F* ] }
8 D( L( Y$ H, P9 M# R a }% H% F( v% J; u3 y. P/ E6 u
int ans = 1;" D! x. e2 f- E% E. s3 Z- ^
for(int i = 1;i<= cnt;i++) { //计算因子总数# l4 a7 y' N2 U8 O* k5 _
ans*= (num+1);: J1 ?' h' g8 \
}
- A8 Z! l; R' P: ]2 w8 O! |1 k return ans;
% T$ H3 c0 o$ }% i8 X}
m. D% r7 p( b, B7 }8 X
+ a/ \- o6 s6 r9 f3 ]int main() {
2 t( h1 Y/ q/ L% O* L, S! S0 L init();* {5 h; r/ `# e) G! j" @
for(int i = 99;i<= 1000000;i++) {
) ~7 {* b1 |2 G if(cal(i) == 100) {
5 }6 _# t5 E6 d0 X, M# G6 K cout<<i<<endl;
) n/ S6 f- C0 n2 L break;$ K2 Y, b, @3 w7 p
}7 Q% b; z4 w" B; |$ G
}
% K& _; J0 K: B% X3 m8 w/ y6 m0 y
0 ^; @, b# f* @- ?6 Z) H return 0;
+ X/ o5 I8 z# C# I" S2 d3 s4 B* _}9 A+ f6 e$ X" B9 g+ G: O7 z1 j" U
--------------------- . A0 J$ y( s$ ]7 f+ }
作者:nka_kun T3 W- [& R- Z& A3 T' {: q$ r
来源:CSDN & }* b" J' i) c3 P* D/ I
$ J+ j, ?/ P! o& P/ N( J+ y: r- q
( V, {& k% w" h$ A6 W
|
zan
|