[FZSZOJ 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 于 福州

转载于:https://www.cnblogs.com/TonyNeal/p/fzszoj1026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的精简博客系统,源码+数据库+毕业论文+视频演示 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前企业对于博客信息的管理和控制,采用人工登记的方式保存相关数据,这种以人力为主的管理模式已然落后。本人结合使用主流的程序开发技术,设计了一款基于Springboot开发的精简博客系统,可以较大地减少人力、财力的损耗,方便相关人员及时更新和保存信息。本系统主要使用B/S开发模式,在idea开发平台上,运用Java语言设计相关的系统功能模块,MySQL数据库管理相关的系统数据信息,SpringBoot框架设计和开发系统功能架构,最后通过使用Tomcat服务器,在浏览器中发布设计的系统,并且完成系统与数据库的交互工作。本文对系统的需求分析、可行性分析、技术支持、功能设计、数据库设计、功能测试等内容做了较为详细的介绍,并且在本文中也展示了系统主要的功能模块设计界面和操作界面,并对其做出了必要的解释说明,方便用户对系统进行操作和使用,以及后期的相关人员对系统进行更新和维护。本系统的实现可以极大地提高企业的工作效率,提升用户的使用体验,因此在现实生活中运用本系统具有很大的使用价值。 关键词:博客管理;Java语言;B/S结构;MySQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值