寒假的牛客训练赛1补题
寒假我太摸魚了
牛牛最近做了這么一道題:
"對于一給定的?n(1≤n≤109)n(1\leq n\leq 10^{9})n(1≤n≤109),計算?(n)\phi(n)?(n), 之中??(x)\phi(x)?(x)是滿足1≤y≤x1\leq y \leq x1≤y≤x?且?gcd(x,y)=1gcd(x,y)=1gcd(x,y)=1的yyy的個數。例如:??(6)=2\phi(6)=2?(6)=2、?(5)=4\phi(5)=4?(5)=4."
牛牛一眼看出這就是歐拉函數,于是立刻用嘴巴解決了這道題。
牛牛意猶未盡,于是他又給你出了一道題。對于一個正整數?xxx,牛牛定義H(x)H(x)H(x)?:
H(x)=?(x)xH(x)=\frac{\phi(x)}{x}H(x)=x?(x)?
牛牛還規定,該函數的定義域為除了111的所有正整數。
于是,牛牛給出了一個整數nnn,想要你回答兩個關于H(x)H(x)H(x)的問題:
1、 回答一個?x0∈[2,n]x_{0}\in [2,n]x0?∈[2,n],使得?H(x0)H(x_{0})H(x0?)?取到?H(x)H(x)H(x)?在?[2,n][2,n][2,n]的最小值。若存在多個這樣的x0x_0x0?,輸出最小的一個。
2、 回答一個?x0∈[2,n]x_{0}\in [2,n]x0?∈[2,n],使得?H(x0)H(x_{0})H(x0?)?取到?H(x)H(x)H(x)?在?[2,n][2,n][2,n]的最大值。若存在多個這樣的x0x_0x0?,輸出最大的一個。
輸入描述:
第一行為一個整數T(1≤T≤100)T(1\leq T \leq 100)T(1≤T≤100),表示測試組數。
接下來的TTT行,每行包括一個整數n(1≤n≤109)n(1\leq n \leq 10^{9})n(1≤n≤109),牛牛給出的整數。
輸出描述:
對于每個測試用例,輸出兩個空格分割的整數,依次為你對牛牛兩個問題的答案。
特別的,若n=1n=1n=1,請輸出?1-1?1表示H(1)H(1)H(1)沒有定義。
示例1
輸入
復制3 2 5 1
3 2 5 1輸出
復制2 2 2 5 -1
2 2 2 5 -1說明
第二組樣例中,H(1)H(1)H(1)未定義,H(2)=12,H(3)=23,H(4)=24,H(5)=45H(2)=\frac{1}{2},H(3)=\frac{2}{3},H(4)=\frac{2}{4},H(5)=\frac{4}{5}H(2)=21?,H(3)=32?,H(4)=42?,H(5)=54?。? 問題一的答案為2、2×3、2×3×5、2×3×5×7......這些前若干個素 數的積中,最大的且不超過n的那一個,如n=233,則答案為 2×3×5×7=210。
?? 問題二的答案為[2,n]中最大的素數。
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; ll prime[20]= {0,2,3,5,7,11,13,17,19,23,29,31,37,41}; ll t, n; inline bool isP(ll x) {if(x<=3) return true;for(ll i=2; i*i<=n; i++){if(n%i==0) return false;}return true; } int main () {cin>>t;while(t--){cin>>n;if(n==1){cout<<-1<<endl;continue;}ll now=1,i=1;while(now*prime[i]<=n){now*=prime[i];i++;}printf("%lld ",now);while(!isP(n)){n--;}printf("%lld\n",n);}return 0; }總結
以上是生活随笔為你收集整理的寒假的牛客训练赛1补题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery导出并下载报表的方式
- 下一篇: 搭建管理驾驶舱--以结果倒逼过程管理