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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值