福州三中OJ 1026 观察者

题目描述

魔法学院的期末考开始了。
校长Jacobi用魔法在考场生成了一个观察者,以观察考场情况。
整个考场可以看成一个xOy平面,N*N个考生的坐标为(p,q) (1<=p,q<=N, p,q∈Z+),而观察者的坐标为(0,0)。
但是问题来了,就算在把考生抽象成点的理想情况下,Jacobi的观察者也看不到所有考生的动向,这是因为有一些考生被另一些考生遮住了。
现在Jacobi想知道他的观察者在理想情况下能看到多少个考生。

输入

输入文件watcher.in的第一行包含一个正整数N。

输出

输出文件watcher.out包含一个正整数,意义见问题描述。

样例输入

3

样例输出

7

提示

[数据规模]

对于40%的数据:N<=1000。

对于80%的数据:N<=1000000。

对于100%的数据:1<=N<=10000000。

[注意事项]

本题代码长度不得超过2KB。

【分析】

看到这题,前面想的是几何,后面用几何推导出了一个式子

如果前面被人挡住了,那么连接观察者(0,0)与这个点(p,q)一定还经过一个点(r,s),而且r<p,s<q,观察发现这是一个正比例图像,那么(p,q)可表示为(rn,sn)(n≥1且为正整数),那么只要一点的横纵坐标互质,就能被观察者观察到。

那么我们得到了O(N)算法:

枚举i∈[1,n],对于每一个i求phi(i)(欧拉函数)即可,根据对称性,乘以2,然后减去1(第一行的那个,即phi(1),被重复计算了两次)那么即可算出答案

那么,我们还需要一个预处理phi值的函数,我们来介绍一下欧拉筛。

首先,以下公式容易推出:

phi(n)=n(1-1/p1)(1-1/p2)...(1-1/pk)

其中,p1..k表示n的质因数分解所分解出的质数

根据这个我们可以推出欧拉筛算法(具体可百度一下)

【PS.这段楼主今晚理解下再更】

那么,我们就有了代码

#include<iostream>
#include<stdio.h>
using namespace std;
int phi[10000010];
int n;
long long cnt=0;
int prime[1000010],tot;
bool check[10000010];
int main() {
    int n;
    scanf("%d",&n);
    phi[1]=1;
    tot=0;
    for (int i=2;i<=n;++i) {
        if(!check[i]) {
            prime[tot++]=i;
            phi[i]=i-1;
        }
        for(int j=0;j<tot;++j) {
            if(i*prime[j]>n) break;
            check[i*prime[j]]=true;
            if(i%prime[j]==0) {
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
            else phi[i*prime[j]]=phi[i]*(prime[j]-1);
        }
    }
    for (int i=1;i<=n;++i) cnt+=phi[i];
    cout<<cnt*2-1<<endl;
    return 0;
}

TonyFang

2015.5.13 于 福州

时间: 2024-10-14 12:29:27

福州三中OJ 1026 观察者的相关文章

Light OJ 1026 Critical Links 求桥

题目 Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be in non-descending order. The solution set must not contain duplicate subsets. For example, If S = [1,2,3], a solution is: [ [3], [1], [2], [1,2,3]

2015-1,福建省计算机学会,福州三中培训点招生

招生通知:http://t.cn/RZVvxLB 报名电话:13950493492(黄老师) 13950407576(宋老师) 第一期培训:共12个半天,每个半天8:30-11:30(四节课),共48课时. 时间:2015年1月17日星期六上午8:30报名并上第1次课: 期末考试期间暂停,顺延到寒假1月31日.2月1日.2日.3日,每日上午上课,剩下安排在开学后的每个周六上午.具体时间如有调整,以现场通知为准. 报名及上课地点:福州三中,图书馆楼5层 学费:¥500.00

福州三中基训day2

今天讲的BFS,不得不说,福建三中订的旅馆是真的劲,早餐极棒!!! 早上和yty大神边交流边听zld犇犇讲BFS,嘛,今天讲的比较基础,而且BFS也很好懂(三天弄过一道青铜莲花池的我好像没资格说),除了BFS,还有基本的搜索优化,但实际上并不是很清楚讲了什么?? 讲了些经典题目,可以说是很强. 下午考试,比较凉,大概可以当提高组day1第2道题和day2的1,2道题的难度?(个人感觉) T1,规律题,比今年noip的t1好写多了,题意大概就是给出k中字符的数量,判断能不能组成一个回文数,试图暴力

Light OJ 1026 - Critical Links (图论-求割边, 桥)

题目大意:双向联通图, 现在求减少任意一边使图的联通性改变,按照起点从小到大列出所有这样的边 解题思路:双向边模版题 tarjan算法 代码如下: #include<bits/stdc++.h> using namespace std; const int N = 100003; vector<int>vec[N]; pair<int, int>edge[N]; int dfn[N], low[N]; int res, ans; void tarjan(int u, i

【算法学习笔记】34.高精度除法 SJTU OJ 1026/1016

高精度除法, 这个和加减乘一样,我们都要从手算的角度入手.举一个例子,比如 524134 除以 123.结果是4261 第一位4的来源是 我们把 524和123对齐,然后进行循环减法,循环了4次,余32,将32134的前三位321继续和123对齐,循环减法2次,余75,把7534的前三位753和123对齐,循环减法6次,余15,将154和123对齐,只能减1次,所以结果是4 2 6 1. 把上述过程程序化 1.把A,B两个数存入char数组 0下标表示的是最高位2.把A的前lenB位和B对齐进行

Light OJ - 1026 - Critical Links(图论-Tarjan算法求无向图的桥数) - 带详细注释

 原题链接   无向连通图中,如果删除某边后,图变成不连通,则称该边为桥. 也可以先用Tajan()进行dfs算出所有点 的low和dfn值,并记录dfs过程中每个 点的父节点:然后再把所有点遍历一遍, 看其low和dfn,满足dfn[ fa ]<low[ i ](0<i<=n, i 的 father为fa) -- 则桥为fa-i. 找桥的时候,要注意看有没有重边:有重边,则不是桥. 另外,本题的题意及测试样例中没有重边,所以不用考虑重边. 带详细注释的题解: #include<s

福州三中集训day1

第一天感觉很是不友好,好在我是学过搜索之后才听的课,不然估计得死在教室-. 某zld犇犇讲的很是强?今天主要是讲枚举和DFS,几道经典题目讲完,还没到下课时间, 然后讲起了float. 有空整理一下吧. 上午就这么浑噩的度过,除了结识了yty大神(误),收获不是很多,大概我太水了吧. 中午,吃饭,食堂好小,终于认识到一中食堂有多吼了. 下午考试,认识了什么叫做毒瘤出题人. T1,一眼可做的简单枚举,就是根据算式找一个符合条件的最小未知数,然后是因为中间我字母搞错了,所以只有10分,然而到晚上调程

福州三中集训day3

Day3数据结构,强无敌. 基本讲的是栈,队列,链表,都是些还会的操作,然后接着讲的就比较心凉凉了,先讲了堆,然后是hsah 栈,队列,链表问题都不大,笔记记得都还好,堆就凉凉了. 不会不会不会,没学过没学过没学过,现在只知道堆是一个"父亲都比儿子小"或是"父亲都比儿子大"的完全二叉树,书上也没有-网太差,课件也下不下来,就很凉-..有空慢慢学吧- Hash,不会,凉凉. 下午考题还是非常良心 T1,一眼模拟可做,但是因为老师数据错了(老师以为是合并果子),然后爆0

【不定期更】【友链整理】

没啥用,就是想整理下自己的友链: yanQval                                http://www.cnblogs.com/yanQval 江苏省淮阴中学 nonamenotitle                       http://nonamenotitle.pub/            武汉二中 l0nl1f3(chouti)                      http://l0nl1f3.leanote.com/          福州三