Tyvj P1346 MMT数(约数个数定理,欧拉函数)
FF博士最近在研究MMT数(莫明堂数-_-)。
如果对于一个数n,存在gcd(n,x)<>1并且n mod x<>0 那么x叫做n的MMT数
显然这样的数可以有无限个。
FF博士现在想知道在所有小于n的正整数里面有多少个n的MMT数
输入格式
仅一行一个数,为n
输出格式
所有小于n的正整数里面有多少个n的MMT数
测试样例1
输入
10
输出
3
备注
样例解释: 3个数分别是 4 6 8
gcd(n,x)的意思是求n和x的最大公约数
对于50%的数据 n<=1000000
对于100%的数据n<=maxlongint
program df;
var i,j,n,m,x,y,z,k,t,s:longint;
begin
readln(n);
//‘======================’求互质数个数
s:=n; k:=0; x:=n;
for i:=2 to trunc(sqrt(n)) do
if x mod i=0 then
begin
s:=s-s div i;
while x mod i=0 do x:=x div i;
end;
if x>1 then s:=s-s div x;
//’=====================‘求质因数个数
x:=n;
for i:=2 to trunc(sqrt(n)) do
if x mod i=0 then
begin
inc(s);
if i<>x mod i then inc(s);
end;
n:=n-1;
writeln(n-s);
end.
公式不懂的:http://blog.csdn.net/jackleg/article/details/53031595
http://blog.csdn.net/jackleg/article/details/53032759
浙公网安备 33010602011771号