zoukankan      html  css  js  c++  java
  • POJ 3090 Visible Lattice Points(欧拉函数)

    题目链接:http://poj.org/problem?id=3090

    通过观察,如果一个点的坐标(x,y),当且仅当x与y互质,能看到。这是比较明显的。

    那么就成了求2~N中每一个数的欧拉函数。

    最后$ans=3+2 imes sum_{i=2}^{N} phi(i)$。

    根据欧拉函数的性质:

    如果$p|n$且$p^2|n$,那么$phi(n)= phi(n/p) imes p$

    如果$p|n$但$p^2$不能被$n$整除,那么$phi(n)= phi(n/p) imes (p-1)$

    AC代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 const int N=2005;
     5 int vis[N],prime[N],cnt,phi[N],sum[N];
     6 int n;
     7 void euler(){
     8     for(int i=2;i<=1000;i++){
     9         if(!vis[i]){
    10             prime[++cnt]=i;
    11             phi[i]=i-1;
    12         }
    13         for(int j=1;j<=cnt;j++){
    14             if(i*prime[j]>1000) break;
    15             vis[i*prime[j]]=1;
    16             phi[i*prime[j]]=phi[i]*(i%prime[j]?prime[j]-1:prime[j]);
    17             if(i%prime[j]==0) break;
    18         }
    19     }
    20 }
    21 int main(){
    22     euler();
    23     for(int i=2;i<=1000;i++) sum[i]=sum[i-1]+phi[i];
    24     scanf("%d",&n);
    25     for(int i=1;i<=n;i++){
    26         int c;
    27         scanf("%d",&c);
    28         printf("%d %d %d
    ",i,c,3+2*sum[c]);
    29     }
    30     return 0;
    31 }
    AC代码
  • 相关阅读:
    BNU Online Judge-29140
    HDU-1022-Train Problem I
    HDU-1312-Red and Black
    BNU Online Judge-34978-汉诺塔
    BNU Online Judge-34976-数细菌
    BNU Online Judge-34973-Liserious战队
    HDU-1010-Tempter of the Bone
    HDU-1518-Square
    thinkphp笔记
    1210. 连号区间数
  • 原文地址:https://www.cnblogs.com/New-ljx/p/13920993.html
Copyright © 2011-2022 走看看