zoukankan      html  css  js  c++  java
  • lightoj 1370 欧拉函数

    A - Bi-shoe and Phi-shoe
    Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu
    Appoint description: 

    Description

    Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a very popular coach for his success. He needs some bamboos for his students, so he asked his assistant Bi-Shoe to go to the market and buy them. Plenty of Bamboos of all possible integer lengths (yes!) are available in the market. According to Xzhila tradition,

    Score of a bamboo = Φ (bamboo's length)

    (Xzhilans are really fond of number theory). For your information, Φ (n) = numbers less than n which are relatively prime (having no common divisor other than 1) to n. So, score of a bamboo of length 9 is 6 as 1, 2, 4, 5, 7, 8 are relatively prime to 9.

    The assistant Bi-shoe has to buy one bamboo for each student. As a twist, each pole-vault student of Phi-shoe has a lucky number. Bi-shoe wants to buy bamboos such that each of them gets a bamboo with a score greater than or equal to his/her lucky number. Bi-shoe wants to minimize the total amount of money spent for buying the bamboos. One unit of bamboo costs 1 Xukha. Help him.

    Input

    Input starts with an integer T (≤ 100), denoting the number of test cases.

    Each case starts with a line containing an integer n (1 ≤ n ≤ 10000) denoting the number of students of Phi-shoe. The next line contains n space separated integers denoting the lucky numbers for the students. Each lucky number will lie in the range [1, 106].

    Output

    For each case, print the case number and the minimum possible money spent for buying the bamboos. See the samples for details.

    Sample Input

    3

    5

    1 2 3 4 5

    6

    10 11 12 13 14 15

    2

    1 1

    Sample Output

    Case 1: 22 Xukha

    Case 2: 88 Xukha

    Case 3: 4 Xukha

    题意:

     Φ (n)表示长度为小于数字n的和n互质的数的个数,也就是欧拉函数。现在给出n个幸运数字,对于每一个幸运数字,要求的x,使Φ (n)的值大于等于这个幸运数字,求这些x和的最小值。

    思路:

    先打表,对输入的n个数排序,然后枚举。

    /*
     * Author:  sweat123
     * Created Time:  2016/7/11 13:55:52
     * File Name: main.cpp
     */
    #include<set>
    #include<map>
    #include<queue>
    #include<stack>
    #include<cmath>
    #include<string>
    #include<vector>
    #include<cstdio>
    #include<time.h>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define INF 1<<30
    #define MOD 1000000007
    #define ll long long
    #define lson l,m,rt<<1
    #define key_value ch[ch[root][1]][0]
    #define rson m+1,r,rt<<1|1
    #define pi acos(-1.0)
    using namespace std;
    const int MAXN = 2000010;
    int er[MAXN],notprime[MAXN],cnt,n;
    int prime[MAXN];
    struct node{
        int id,val;
        friend bool operator <(node fa,node fb){
            if(fa.val != fb.val)return fa.val > fb.val;
            return fa.id > fb.id;
        }    
    };
    int num;
    void init(){
        cnt = 0;
        memset(er,0,sizeof(er));
        memset(notprime,0,sizeof(notprime));
        for(int i = 2; i <= MAXN - 10; i++){
            if(!notprime[i]){
                er[i] = i - 1;
                prime[cnt++] = i;
            } 
            for(int j = 0; j < cnt && 1LL * prime[j] * i <= MAXN; j++){
                notprime[i * prime[j]] = 1;
                if(i % prime[j] == 0){
                    er[i * prime[j]] = er[i] * prime[j];break; 
                } else {
                    er[i * prime[j]] = er[i] * (prime[j] - 1);   
                }
            }
        } 
    }
    int a[1000010];
    int main(){
        init();
        int t,Case = 0;
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            for(int i = 1; i <= n; i++){
                scanf("%d",&a[i]);   
            }
            sort(a+1,a+n+1);
            ll ans = 0;
            int x = 2;
            for(int i = 1; i <= n; i++){
                while(er[x] < a[i]){
                    x += 1;   
                }
                ans += x;
            }
            printf("Case %d: %lld Xukha
    ",++Case,ans);
        }
        return 0;
    }
  • 相关阅读:
    软工实践寒假作业(1/2)
    软工总结
    软件工程第一次结对作业
    软工实践第一次个人编程作业
    软工实践第一次作业
    2019年北航OO第四单元(UML任务)及学期总结
    2019年北航OO第三单元(JML规格任务)总结
    用Maven+IDEA+Eclipse组合获得最好的OpenJML体验
    2019年北航OO第二单元(多线程电梯任务)总结
    2019年北航OO第一单元(表达式求导任务)总结
  • 原文地址:https://www.cnblogs.com/sweat123/p/5660146.html
Copyright © 2011-2022 走看看