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

bzoj 2190

时间:2018-10-26 20:32:07      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:++   span   统计   init   for   gcd   str   数据   转化   

题意:求

题解:这题...数据范围是真小...

研究一下这一表达式,发现gcd(i,j)=1表示i,j互质,那么互质肯定能想到欧拉函数,可是欧拉函数要求j<i,那么我们变化一下:显然原矩阵是对称的,所以可以转化一下,变成

(注意到后面-1是为了防止(1,1)被重复统计)

那么发现答案就是

公式挂掉的地方见博客:https://blog.csdn.net/lleozhang/article/details/83419761

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
int pri[40005];
int phi[40005];
bool used[40005];
int tot=0;
int n;
void init()
{
    scanf("%d",&n);
    if(n==1)
    {
        printf("0\n");
        return;
    }
    n--;
    int ans=1;
    for(int i=2;i<=n;i++)
    {
        if(!used[i])
        {
            pri[++tot]=i;
            phi[i]=i-1;
        }
        for(int j=1;j<=tot&&i*pri[j]<=n;j++)
        {
            used[i*pri[j]]=1;
            if(i%pri[j]==0)
            {
                phi[i*pri[j]]=phi[i]*pri[j];
                break;
            }else
            {
                phi[i*pri[j]]=phi[i]*(pri[j]-1);
            }
        }
        ans+=phi[i];
    }
    ans*=2;
    ans++;
    printf("%d\n",ans);
}
int main()
{
    init();
    return 0;
}

 

bzoj 2190

标签:++   span   统计   init   for   gcd   str   数据   转化   

原文地址:https://www.cnblogs.com/zhangleo/p/9858365.html

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