拆分整数和使乘积最大.
思路:
这个题的话我还是根据它给的那个样例想到的一个贪心...
5 可以拆成2和3 乘积为6 比5 大. 再多些几组,比如8 可以拆分为4 *4 为16,4个2也是16,拆成6 和 2 ,那么6还可以拆成3 *3 比6要大了,所以对于这个题我们只需要拆分成更多的3就可以了,注意判断取余为1的情况 此时3*1肯定小于2* 2;
#include<bits/stdc++.h>
#define Ri(a) scanf("%d", &a)
#define Rl(a) scanf("%lld", &a)
#define Rf(a) scanf("%lf", &a)
#define Rs(a) scanf("%s", a)
#define Pi(a) printf("%d\n", (a))
#define Pf(a) printf("%lf\n", (a))
#define Pl(a) printf("%lld\n", (a))
#define Ps(a) printf("%s\n", (a))
#define W(a) while(a--)
#define CLR(a, b) memset(a, (b), sizeof(a))
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define exp 0.00000001
#define pii pair<int, int>
#define mp make_pair
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
ll n;
ll qq(ll a,ll b)
{
ll res=1;
while(b)
{
if(b%2==1)
res=res*a%MOD;
a=a*a%MOD;
b/=2;
}
return res;
}
int main()
{
int t;
ll n;
Ri(t);
W(t)
{
Rl(n);
if(n==1)
Pi(1);
else if(n==2)
Pi(2);
else
{
ll cnt=n%3;
ll cntt=n/3;
ll ans1;
if(cnt==0)
{
ans1=qq(3,cntt)%MOD;
}
if(cnt==1)
{
ans1=qq(3,cntt-1);
ans1=ans1*4%MOD;
}
if(cnt==2)
{
ans1=qq(3,cntt);
ans1=ans1*2%MOD;
}
Pl(ans1);
}
}
return 0;
}