zoukankan      html  css  js  c++  java
  • Problem 69:Totient maximum

    Problem 69:Totient maximum

    题目链接:http://static.projecteuler.net/problem=69

    题目大意:求$n$($n leqslant 1000,000$),使得$frac{n}{varphi (n)}$最大.

    若$n=prod_{i=0}^s p_i^{e_i}$是$n$的标准分解式,那么$varphi (n)=nprod_{i=0}^s (1-frac{1}{p_i})$.于是$frac{n}{varphi (n)}=frac{1}{prod_{i=0}^s (1-frac{1}{p_i})}$.

    而$p_i$是递增的,故每次贪心取最小的$p_i$可以得到最优解,故$n$为满足$n=prod_{i=0}^t p_i leqslant 1000,000$的最大的$n$.

    代码如下:

     1 #include <iostream>
     2 #define N 100005
     3 using namespace std;
     4 bool vis[N];
     5 int p[N],k;
     6 void prime(){
     7     for(int i=2;i<=100000;++i){
     8         if(!vis[i])p[k++]=i;
     9         for(int j=0;j<k&&i*p[j]<=100000;++j){
    10             vis[i*p[j]]=1;
    11             if(i%p[j]==0)break;
    12         }
    13     }
    14 }
    15 int main(void){
    16     prime();
    17     int ans=1;
    18     for(int i=0;i<k&&ans*p[i]<=1000000;++i)ans*=p[i];
    19     cout<<ans;
    20 }
  • 相关阅读:
    Java API学习
    Java接口类学习笔记
    TCP/IP协议族
    Web服务器
    Redis笔记
    Python知识总汇
    GIL锁
    day8
    day7
    day6
  • 原文地址:https://www.cnblogs.com/barrier/p/6569331.html
Copyright © 2011-2022 走看看