zoukankan      html  css  js  c++  java
  • poj2154

    利用bzoj2705的结论我们很容易优化这道等价类计数的问题

    sum(n^gcd(i,n))/n mod p (1<=i<=n)

    =sum(phi(n/L)*n^L)/n mod p (n mod L=0)

    =sum(phi(n/L)*n^(L-1)) mod p

    这题时限略紧,我的pascal怎么都卡不过去,请指教

     1 var b:array[0..31] of longint;
     2     s,p,i,t,m:longint;
     3     n,ans:longint;
     4 
     5 function quick(x:longint):longint;
     6   var i,j:longint;
     7   begin
     8     j:=0;
     9     while x<>0 do
    10     begin
    11       inc(j);
    12       b[j]:=x mod 2;
    13       x:=x shr 1;
    14     end;
    15     quick:=1;
    16     for i:=j downto 1 do
    17     begin
    18       quick:=sqr(quick) mod p;
    19       if b[i]=1 then quick:=quick*m mod p;
    20     end;
    21   end;
    22 
    23 function phi(x:longint):longint;
    24   var i:longint;
    25   begin
    26     phi:=1;
    27     for i:=2 to trunc(sqrt(x)) do
    28       if x mod i=0 then
    29       begin
    30         phi:=phi*(i-1);
    31         x:=x div i;
    32         while x mod i=0 do
    33         begin
    34           x:=x div i;
    35           phi:=phi*i;
    36         end;
    37         if x=1 then break;
    38       end;
    39     if x>1 then phi:=phi*(x-1);
    40     phi:=phi mod p;
    41   end;
    42 
    43 begin
    44   readln(t);
    45   while t>0 do
    46   begin
    47     readln(n,p);
    48     m:=n mod p;
    49     ans:=0;
    50     for i:=1 to trunc(sqrt(n)) do
    51       if n mod i=0 then
    52       begin
    53         ans:=ans+phi(n div i)*quick(i-1) mod p;
    54         if i<>n div i then ans:=ans+phi(i)*quick(n div i-1) mod p;
    55         ans:=ans mod p;
    56       end;
    57     writeln(ans);
    58     dec(t);
    59   end;
    60 end.
    View Code
  • 相关阅读:
    Mysql_常规操作
    三剑客
    Nginx_安全2
    shell_常规小脚本
    redis数据库持久化
    redis数据库操作
    keepalived高可用lvs集群
    ansible的roles角色
    keepalived高可用
    keepalived概念
  • 原文地址:https://www.cnblogs.com/phile/p/4473168.html
Copyright © 2011-2022 走看看