zoukankan      html  css  js  c++  java
  • A

    A - Bi-shoe and Phi-shoe

    题目链接:https://vjudge.net/problem/LightOJ-1370#author=iron_china
    题目大意:
    给出含有n个数字的序列a[],对于每个数字ai找到一个欧拉函数值大于等于ai的数bi,求找到的所有数bi的最小值之和sum。
    解题思路:
    不同的n对应的欧拉函数可能相同,所以需要开一个数组dp,存储不同的欧拉函数值对应的最小的n,再用后缀最小值维护一下,使dp[i]表示dp[i]的欧拉函数大于等于i且dp[i]是符合条件中最小的值。
    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std; 
     3 typedef long long ll;
     4 const ll maxn=1e6+100;
     5 ll INF=1e17+7;
     6 ll E[maxn];
     7 ll arr[maxn];
     8 ll dp[maxn];
     9 void euler_B(){
    10     for(ll i=2;i<maxn;i++){  
    11         if(!E[i])  
    12         for(ll j=i;j<maxn;j+=i){  
    13             if(!E[j])E[j]=j;  
    14             E[j]=E[j]/i*(i-1);  
    15         }  
    16     }  
    17 }
    18 int main(){
    19     ll T,n=0;
    20     euler_B();
    21     fill(dp,dp+maxn,INF);
    22     for(ll i=2;i<maxn;i++){
    23         dp[E[i]]=min(dp[E[i]],i);
    24         n=max(n,E[i]);
    25     }
    26     for(ll i=n;i>=1;i--){
    27         dp[i]=min(dp[i+1],dp[i]);
    28     }
    29     cin>>T;
    30     ll num=0;
    31     while(T--){
    32         ll a;
    33         ll sum=0;
    34         num++;
    35         scanf("%lld",&n);
    36         for(ll i=1;i<=n;i++){
    37             scanf("%lld",&a);
    38             sum+=dp[a];
    39         }
    40         printf("Case %lld: %lld Xukha
    ",num,sum);
    41     }
    42     return 1;
    43 }
  • 相关阅读:
    python之路
    go mod
    黑苹果流程
    mac go配置,环境配置
    mac重装系统
    多级分销概念 MongoDB||MySQL
    MongoDB查询mgov2的聚合方法
    linux被当矿机排查案例
    docker-compose容器中redis权限问题
    docker-compose中redis查询版本
  • 原文地址:https://www.cnblogs.com/meanttobe/p/12396387.html
Copyright © 2011-2022 走看看