• 2017.08.18【NOIP提高组】模拟赛B组 恭介的法则(rule)


    ####Description

    终于,在众亲们的奋斗下,最终boss 恭介被关进了库特设计的密室。正当她们松了一口气时,这个世界却发生了天翻覆地的变化:地面开始下沉,天空开始变成血红色,海水沸腾……一幅世界末日的图景。美鱼从她手中的古籍《若山牧水诗歌集》中发现了原因:白鸟は かなしからずや 空の青 海のあをにも 染まずただよふ 。大(xia)意(shuo)就是狡猾的恭介在创造这个世界的时候就篡改了法则。而这个法则的起源,就是一只生死之间的猫。这个猫被关在一个黑盒子里,盒子里有两个毒气罐,如果有任意一个毒气罐被打开那么猫将会被杀死,法则也能得到纠正。然而外界能控制的仅仅是这两个毒气罐被打开的概率。假设第一个毒气罐被打开的概率为1/x,第二个毒气罐为1/y(x,y 为正整数),那么当两个概率和为1/(n!)时,猫将会被莫名其妙地杀死。现在美鱼想知道,有多少对(x,y)可以让猫被莫名其妙杀死。

    ####Input

    一行,一个正整数n

    ####Output

    一行,满足题意的(x,y)对数。

    ####Sample Input

    6

    ####Sample Output

    135

    ####Data Constraint

    对于30%的数据 n<=6

    对于60%的数据 n<=50

    对于100%的数据 n<=700000

    ####题解:
    本题就是一个神奇的数论。现在,我来介绍一下:
    题意就是求1/x+1/y=1/n!的方案数。
    来变化一下:
    原式=x+y/xy=1/n!
    =n!(x+y)=x
    y
    =n!x+n!y=xy
    =n!x-x
    y=-n!y
    =x(y-n!)=n!y
    =x=n!y/(y-n!)
    到这里,我们发现搞不下去了。
    那么就按照一些基本性质来看:
    因为y,x是正整数那么就可以得出y>n!
    再说,我们设y=n!+k(k∈z)
    原式=x=n!(n!+k)/k
    =x=((n!)^2+kn!)/k
    =k |((n!)^2+kn!)
    kn!是k的倍数,满足x为正整数的条件是k |(n!)^2
    所以原问题转化为求(n!)^2的因数个数

    这样我们来看看如何实现
    首先,我们求出1~n的素数,算出所有质因数的指数平方即可
    这道题就解决了,记得用高精度加压位

    Code:

    type
            mine=array[0..1000000]of int64;
    var
            i,j,k,l,n,m:longint;
            answer,p,gs:int64;
            a:mine;
            bz:array[0..1000000] of boolean;
    procedure plus(var a:mine; x:int64);
    var
            i,len:longint;
    begin
            for i:=1 to a[0] do a[i]:=a[i]*x;
            len:=a[0];
            i:=1;
            while i<=len do
            begin
                    a[i+1]:=a[i+1]+a[i] div 1000000000;
                    a[i]:=a[i] mod 1000000000;
                    if (a[i+1]>0) and (i+1>len) then inc(len);
                    inc(i);
            end;
            a[0]:=len;
    end;
    procedure print(var a:mine);
    var
            i:longint;
    begin
            write(a[a[0]]);
            for i:=a[0]-1 downto 1 do
            begin
                    if a[i]<100000000 then write(0);
                    if a[i]<10000000 then write(0);
                    if a[i]<1000000 then write(0);
                    if a[i]<100000 then write(0);
                    if a[i]<10000 then write(0);
                    if a[i]<1000 then write(0);
                    if a[i]<100 then write(0);
                    if a[i]<10 then write(0);
                    write(a[i]);
            end;
    end;
    
    begin
            readln(n);
            fillchar(bz,sizeof(bz),true);
            a[0]:=1;
            a[1]:=1;
            answer:=1;
            for i:=2 to n do
            begin
                    if bz[i]=true then
                    begin
                            for j:=2 to n div i do
                                    bz[i*j]:=false;
                    end;
            end;
            bz[1]:=false;
            for i:=1 to n do
            begin
                    if bz[i] then
                    begin
                            p:=n;
                            gs:=0;
                            while p>=i do
                            begin
                                    p:=p div i;
                                    gs:=gs+p;
                            end;
                            gs:=gs*2+1;
                            if answer*gs>1000000000 then
                            begin
                                    plus(a,answer);
                                    answer:=1;
                            end;
                            answer:=answer*gs;
                    end;
            end;
            if answer<>1 then
            begin
                    plus(a,answer);
            end;
            print(a);
    end.
    end.
    
    
    
    我活在这夜里。无论周围多么黑暗,我都要努力发光!我相信着,终有一天,我会在这深邃的夜里,造就一道最美的彩虹。
  • 相关阅读:
    AS3打开本地文件
    Android上的Adobe AIR应用程序运行环境发布了!
    as3 创建遮罩层和自定义带参数的事件
    NetStream.appendBytes, 走向Flash P2P VOD的第一步
    BitmapData的整理
    AS3 in FlashDevelop
    站内站外AS3资源导航帖
    swf不能访问本地资源的解决办法
    JSON 序列化和反序列化——JavaScriptSerializer实现
    Json.net说法——(一)修饰标签,日期序列化
  • 原文地址:https://www.cnblogs.com/RainbowCrown/p/11148422.html
Copyright © 2020-2023  润新知