一看到是10^15,就很蒙。一眼暴力超时。
我们需要注意的是题中问的是Good Num的数量,而不是Good Num有哪些,也就是说我们不需要求出什么,而是可以从每一位的角度来进行考察。每一位有0~9这几个数字,那么质数有4个,偶数有5个,这样格局就打开了...
思路来了,就用到了快速幂
快速幂的模板:
//求(a^b)mod c a、b、c都要是long long int的类型
long long int pow_m(long long int a,long long int b,long long int c){
a=a%c;//看情况,可加可不加
long long int res=1;
while(b){
if(b&1){//b是奇数,那么b&1=1
res=(res*a)%c;
}
a=(a*a)%c;//注意要取模
b=b>>1;
}
return res;
}
整道题的代码:
#include<bits/stdc++.h>
using namespace std;
long long int k;
long long int pow_m(long long int a,long long int b,long long int c){
long long int res=1;
while(b){
if(b&1){//b是奇数,那么b&1=1
res=(res*a)%c;
}
a=(a*a)%c;//注意要取模
b=b>>1;
}
return res;
}
int main( )
{
cin>>k;
long long int m=1e9+7;
if(k%2==0){
cout<<(pow_m(5,k/2,m)*pow_m(4,k/2,m))%m;
}
else{
cout<<(pow_m(5,k/2+1,m)*pow_m(4,k/2,m))%m;
}
return 0;
}