第一题:
#include<stdio.h>
typedef long long ll;
const ll mod=987654321;
int n;
bool isPrime[100005];
void init()
{
for(int i=2;i<=n;++i)
isPrime[i]=true;
for(int i=2;i<=n;++i)
{
if(isPrime[i])
{
for(int j=i<<1;j<=n;j+=i)
isPrime[j]=false;
}
}
}
int main()
{
freopen("love.txt","r",stdin);
scanf("%d",&n);
init();
ll ans=1;
for(int i=2;i<=n;++i)
{
if(isPrime[i])
{
ll temp=i;
while(temp<=n)
{
ans=ans*i%mod;
temp*=i;
}
}
}
printf("%lld\n",ans);
return 0;
}
第二题:
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
const int mod=1e9+7;
int dp[100005][9][9];
int dx[]={1,1,2,2,-1,-1,-2,-2};
int dy[]={2,-2,-1,1,2,-2,-1,1};
int main()
{ char s[55]; long long dp[55][55]={0}; scanf("%s",s); int n=strlen(s); for(int i=0;i<n;++i) dp[i][i]=1; for(int len=2;len<=n;++len) { for(int i=0;i+len-1<n;++i) { int j=i+len-1; if(s[i]==s[j]) dp[i][j]=dp[i][j-1]+dp[i+1][j]+1; else dp[i][j]=dp[i][j-1]+dp[i+1][j]-dp[i+1][j-1]; } } printf("%lld\n",dp[0][n-1]); return 0;
}
第三题:
#include <stdio.h>
const int mod=1e9+7;
int dp[100005][9][9];
int dx[]={1,1,2,2,-1,-1,-2,-2};
int dy[]={2,-2,-1,1,2,-2,-1,1};
int main()
{ int n,ex,ey; dp[0][0][0]=1; scanf("%d %d %d",&n,&ey,&ex); for(int i=1;i<=n;++i) { for(int j=0;j<=8;++j) { for(int k=0;k<=8;++k) { for(int m=0;m<8;++m) { int x=j+dx[m],y=k+dy[m]; if(x<0||x>8||y<0||y>8) continue; dp[i][j][k]+=dp[i-1][x][y]; if(dp[i][j][k]>=mod) dp[i][j][k]-=mod; } } } } printf("%d\n",dp[n][ex][ey]); return 0;
}