码迷,mamicode.com
首页 > 其他好文 > 详细

欧拉筛法(线性筛法)与解积性函数

时间:2018-08-14 17:06:31      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:article   sdn   str   return   turn   日常   一个   mes   ima   

日常吐槽:啧啧啧今天真是玄幻的一天。早上睡到9:10发现睡过了一个半小时,在9:30狂奔来机房 + 吃早餐,最后只剩一个半小时心态崩—>光荣爆零???又在下午四点把全部题改完???上午和下午的效率真的不是一个级别的啊...好的接下来把这道奇葩例题。

JZOJ 4732 函数

技术分享图片技术分享图片

 

题解

  23333这真的是出题人中的一股清流了,对建议打表的那三个点先表示感激(虽然我还是爆零因为压根儿没看懂题目)

  让我们大胆地猜测一下,这个不知道是什么鬼玩意儿的函数是什么东西呢?好,拿起笔和草稿纸,模拟,没错!就!是!欧!拉!函!数!

  真是人生处处充满惊喜啊,20分到手。

  还想再高一点,没问题,直接加上个欧拉筛,你已拥有50分。

  OKOK,你可以再用欧拉函数的积性函数特性,70分啦。

  打表的三个点最为玄学,参见下图。

  技术分享图片

 

    完美,接下来我们要做的就是AC了

代码

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n, tot = 0;
int prime[(int)1e7 + 1], phi[(int)1e7 + 1];
int main()
{
    scanf("%d", &n);
    if (n == (int)1e7 * 3) 
    {
        printf("%lld\n", (long long)1e7 * 18);
        return 0;
    }
    if (n == 3)
    {
        printf("525162079891401242\n");
        return 0;
    }
    if (n == 5)
    {
        printf("21517525747423580\n");
        return 0;
    }
    phi[1] = 1;
    for (int i = 2; i <= 1e7; i++)
    {
        if (!phi[i])
        {
            prime[++tot] = i;
            phi[i] = i - 1;
        }
        for (int j = 1; j <= tot; j++)
        {
            if (i * prime[j] > 1e7) break;
            if (i % prime[j] != 0)
                phi[i * prime[j]] = phi[i] * phi[prime[j]];
            else
            {
                phi[i * prime[j]] = phi[i] * prime[j];
                break;
            }
        }
    }
    long long ans = 0;
    for (int i = 1; i <= n; i++)
    {
        int a;
        scanf("%d", &a);
        ans += phi[a];
    }
    printf("%lld", ans);
    return 0;
}

 

  23333全场最快不解释,先嘚瑟一会儿(真的没有故意卡!)

  顺便贴两个很好的博客文章,

  https://www.cnblogs.com/grubbyskyer/p/3852421.html

  https://blog.csdn.net/y20070316/article/details/51729812

 

欧拉筛法(线性筛法)与解积性函数

标签:article   sdn   str   return   turn   日常   一个   mes   ima   

原文地址:https://www.cnblogs.com/zhy-AK/p/9475374.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!