D - Problem D. Euler Function (欧拉函数找规律)

In number theory, Euler's totient function φ(n)φ(n) counts the positive integers up to a given integer nn that are relatively prime to nn. It can be defined more formally as the number of integers kk in the range 1≤k≤n1≤k≤n for which the greatest common divisor gcd(n,k)gcd(n,k) is equal to 11. 
For example, φ(9)=6φ(9)=6 because 1,2,4,5,71,2,4,5,7 and 88 are coprime with 99. As another example, φ(1)=1φ(1)=1 since for n=1n=1 the only integer in the range from 11 to nn is 11itself, and gcd(1,1)=1gcd(1,1)=1. 
A composite number is a positive integer that can be formed by multiplying together two smaller positive integers. Equivalently, it is a positive integer that has at least one divisor other than 11 and itself. So obviously 11 and all prime numbers are not composite number. 
In this problem, given integer kk, your task is to find the kk-th smallest positive integer nn, that φ(n)φ(n) is a composite number. 

Input

The first line of the input contains an integer T(1≤T≤100000)T(1≤T≤100000), denoting the number of test cases. 
In each test case, there is only one integer k(1≤k≤109)k(1≤k≤109). 

Output

For each test case, print a single line containing an integer, denoting the answer. 

Sample Input

2
1
2

Sample Output

5
7

【解析】

题意:给了一个欧拉函数的定义:对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(特别的φ(1)=1),

比如说φ(9) = 6(1,2,3,4,5,7,8共六个)。给你一个k,找出第k小的欧拉函数中结果是合数的自变量x的大小。

10^9次方了都,我猜就是规律题了。先自己打表列出来了,然后就很容易发现规律了。

#include <bits/stdc++.h>
using namespace std;
/*int gcd(int a, int b)
{
	return b == 0 ? a : gcd(b, a%b);
}*/
int main()
{
	int t;
	scanf("%d", &t);
	while (t--)
	{
		int k;
		scanf("%d", &k);
		/*for (int j = 3; j < 100; j++)
		{
			int ans = 1;
			for (int i = 2; i < j; i++)
			{
				if (gcd(i, j) == 1)ans++;
			}
			printf("%d %d\n", j, ans);
		}*/
		if (k == 1)printf("5\n");
		else printf("%d\n", k + 5);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/waterboy_cj/article/details/81392422
今日推荐