如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。
URAL/1049
来自"NOCOW"
< URAL
by cgangee http://www.cgang.tk
const maxn=10000; var i,j,k,m,n,l:longint; a:array[1..maxn]of boolean; b:array[1..maxn]of longint; ans,now:longint; begin i:=1; ans:=1; while i<=maxn do begin inc(i); while (i<=maxn)and a[i] do inc(i); if i>maxn then break; for j:=2 to maxn div i do a[j*i]:=true; end; for i:=1 to 10 do begin read(k); now:=0; for j:=2 to maxn do if not a[j] then while k mod j=0 do begin inc(b[j]); k:=k div j; end; end; for i:=2 to maxn do ans:=ans*(b[i]+1) mod 10; writeln(ans); end.
VAR f:array [1..10000] of boolean; prime:array [1..1229] of longint; a:array [1..10000] of longint; i,j,k,n,sum,ans:longint; BEGIN sum:=0; for i:=2 to 10000 do BEGIN if f[i]=false then BEGIN inc(sum); prime[sum]:=i; END; for j:=1 to sum do BEGIN if i*prime[j]>10000 then break; f[i*prime[j]]:=true; if i mod prime[j]=0 then break; END; END; k:=0; for i:=1 to 10 do BEGIN readln(n); for j:=1 to sum do while n mod prime[j]=0 do BEGIN n:=n div prime[j]; inc(a[prime[j]]); if j>k then k:=j; END; END; ans:=1; for i:=1 to k do ans:=ans*(a[prime[i]]+1); writeln(ans mod 10); END. //from lzoi_ys
解释一下 先来看求一个数a的约数个数。a=p1^b1+p2^b2+……pn^bn,其中p都是质数。那么它所有的约数都可以写成 p1^c1+p2^c2……+pn^cn{ci<=bi},这样每个ci都有bi+1种选择,而且由于都是质数所以不会有重复的。这样只要对 于每个数都分解质因数然后计数就可以了。