做多校赛的题,自己只能做点简单的,大家都会的,菜是原罪啊。。。。
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
这道题的关键是了解欧拉函数的性质,他是统计一个数与他互质的数的个数例如5有1,2,3,4四个数这道题试求一个数,与他互质的数的个数是不是一个合数,k代表说的是第几个这样的数与他互质的数的个数是合数。
这里考了欧拉函数的其中一个性质:
4是最小的合数,>=4的偶数都是合数。所以第一个数是5;由于6有两个1,5互质的数所以第二个是7,以后的只都为n+5;
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
/*const ll maxn=1e7+10;
int oula(int n)
{
int rea=n;
for(int i=2; i*i<=n; i++)
if(n%i==0)//第一次找到的必为素因子
{
rea=rea-rea/i;
do
n/=i;//把该素因子全部约掉
while(n%i==0);
}
if(n>1)
rea=rea-rea/n;
return rea;
}*/
ll t;
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
ll k;
cin>>k;
if(k==1)cout<<5<<endl;
else cout<<k+5<<endl;
}
return 0;
}