LightOJ1370 Bi-shoe and Phi-shoe —— 欧拉函数

题目链接:https://vjudge.net/problem/LightOJ-1370

1370 - Bi-shoe and Phi-shoe
Time Limit: 2 second(s) Memory Limit: 32 MB

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

Output for Sample Input

3

5

1 2 3 4 5

6

10 11 12 13 14 15

2

1 1

Case 1: 22 Xukha

Case 2: 88 Xukha

Case 3: 4 Xukha

题意:

给出n个数,为每个数x找到满足:x<=Euler(y) 的最小的y,其中Euler()为欧拉函数。

题解:

可知,当y为素数,Euler(y) = y-1。所以,只需从x+1开始,找到第一个素数即可。

代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <cmath>
 7 #include <queue>
 8 #include <stack>
 9 #include <map>
10 #include <string>
11 #include <set>
12 using namespace std;
13 typedef long long LL;
14 const int INF = 2e9;
15 const LL LNF = 9e18;
16 const int MOD = 1e9+7;
17 const int MAXN = 1e6+10;
18 
19 bool vis[MAXN];
20 
21 void getPrime()
22 {
23     int m = (int)sqrt(MAXN);
24     memset(vis, 0, sizeof(vis));
25     vis[1] = 1;
26     for(int i = 2; i<=m; i++) if(!vis[i])
27         for(int j = i*i; j<MAXN; j+=i)
28             vis[j] = 1;
29 }
30 
31 int main()
32 {
33     getPrime();
34     int T, n;
35     scanf("%d", &T);
36     for(int kase = 1; kase<=T; kase++)
37     {
38         LL ans = 0;
39         scanf("%d", &n);
40         for(int i = 1; i<=n; i++)
41         {
42             int x;
43             scanf("%d", &x);
44             for(int j = x+1;;j++) if(!vis[j]){
45                 ans += j;
46                 break;
47             }
48         }
49         printf("Case %d: %lld Xukha
", kase,ans);
50     }
51 }
View Code
原文地址:https://www.cnblogs.com/DOLFAMINGO/p/8360253.html