• 洛谷P3601签到题(欧拉函数)


    题目背景

    这是一道签到题!

    建议做题之前仔细阅读数据范围!

    题目描述

    我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数。

    这题作为签到题,给出l和r,要求求

    输入输出格式

    输入格式:

    一行两个整数,l、r。

     

    输出格式:

    一行一个整数表示答案。

     

    输入输出样例

    输入样例#1:
    233 2333
    输出样例#1:
    1056499

    输入样例#2:
    2333333333 2333666666
    输出样例#2:
    153096296

    说明

    对于30%的数据,

    对于60%的数据,

    对于100%的数据,

    qiandao(x)=x-phi(x),转化为求欧拉函数,而x只可能有一个大于n^0.5的素因子,所以只要求到n^0.5的素数就行了。还是批量处理欧拉函数的值,否则TLE啊。

     1 program rrr(input,output);
     2 const
     3   cs=666623333;
     4 var
     5   a:array[0..1000010]of boolean;
     6   f,c:array[0..1000010]of int64;
     7   i,j,n:longint;
     8   l,r,k,ans:int64;
     9 begin
    10    assign(input,'r.in');assign(output,'r.out');reset(input);rewrite(output);
    11    readln(l,r);
    12    n:=trunc(sqrt(r));
    13    fillchar(a,sizeof(a),true);
    14    k:=l;while k<=r do begin f[k-l]:=k;c[k-l]:=k;inc(k); end;
    15    for i:=2 to n do
    16       if a[i] then
    17          begin
    18             k:=l div i*i;if k<l then k:=k+i;
    19             while k<=r do
    20                begin
    21                   f[k-l]:=f[k-l] div i*(i-1);
    22                   while c[k-l] mod i=0 do c[k-l]:=c[k-l] div i;
    23                   k:=k+i;
    24                end;
    25             j:=i<<1;while j<=n do begin a[j]:=false;j:=j+i; end;
    26          end;
    27    k:=l;while k<=r do begin if c[k-l]>1 then f[k-l]:=f[k-l] div c[k-l]*(c[k-l]-1);inc(k); end;
    28    ans:=0;
    29    k:=l;while k<=r do begin ans:=(ans+k-f[k-l]) mod cs;inc(k); end;
    30    write(ans);
    31    close(input);close(output);
    32 end.
  • 相关阅读:
    DIV+CSS对SEO的帮助
    几种CSS及网站开发常犯的错误
    DIV CSS让搜索引擎蜘蛛不再累
    DIV CSS布局概述及初步入门
    闭合浮动元素(clearingfloat)的简单方法
    Vue学习(十三)模版引擎算是预处理器吗?
    base64学习(二)base64应用于图片
    base64学习(一)Base64的编码转换方式
    HTTP学习(四)短连接和长连接
    favicon.ico学习(三)实战
  • 原文地址:https://www.cnblogs.com/Currier/p/6481616.html
Copyright © 2020-2023  润新知