A- A^B Mod C
快速幂取模
#include<stdio.h>
typedef long long ll;
int JS(ll a,ll b,ll c)
{
ll ans = 1;
a=a%c;
while(b>0)
{
if(b & 1)
ans=ans*a %c;
b >>= 1;
a=a*a%c;
}
return ans;
}
int main()
{
ll a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
a = JS(a,b,c);
printf("%lld",a);
return 0;
}
C-判决素数个数
素数筛
#include<stdio.h>
#include<math.h>
#define N 100010
bool book[N];
void isPrime()
{
book[1] = 1;
for(int i=2;i*i<N;i++)
{
if(!book[i])
{
for(int j=i*i;j<=N;j+=i)
book[j] = 1;
}
}
}
int main()
{
isPrime();
int m,n,t;
scanf("%d%d",&m,&n);
int sum = 0;
if(m > n)
{
t=m;
m=n;
n=t;
}
for(int i=m;i<=n;i++)
{
if(!book[i])sum++;
}
printf("%d",sum);
return 0;
}
D-矩阵乘法
简单的循环计算
#include<stdio.h>
int a[110][110],b[110][110],c[110][110];
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(int i=0;i<m;i++)
for(int j=0;j<k;j++)
scanf("%d",&b[i][j]);
for(int i=0;i<n;i++)
for(int j=0;j<k;j++)
{
int sum=0;
for(int h=0;h<m;h++)
{
sum+=a[i][h]*b[h][j];
}
c[i][j]=sum;
}
for(int i=0;i<n;i++)
for(int j=0;j<k;j++)
{
printf("%d",c[i][j]);
if(j != k-1)printf(" ");
else printf("\n");
}
return 0;
}
E-Bash游戏
巴什博弈
#include<stdio.h>
typedef long long ll;
int main()
{
int T;
ll n,k;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&n,&k);
int flag = -1;
flag= n%(k+1)==0?1:2;
if(flag == 1)printf("B\n");
if(flag == 2)printf("A\n");
}
return 0;
}
F-取石子游戏
威佐夫博弈
#include<stdio.h>
#include<math.h>
int main()
{
int m,n,temp;
double ret,op;
ret = (sqrt(5)+1)/2.0;
while(~scanf("%d%d",&m,&n))
{
if(m>n)
{
int t;
t=m;
m=n;
n=t;
}
op = (double)(n-m);
temp=(int)(op*ret);
if(m == temp)printf("0\n");
else printf("1\n");
}
return 0;
}
H - 互质数的个数(一)
欧拉函数
#include<stdio.h>
typedef long long ll;
ll euler (ll n)
{
ll ans = n;
for(ll i=2;i*i<=n;i++)
{
if(n % i == 0)
{
ans =ans/i*(i-1);
while(n %i ==0)n/=i;
}
}
if(n > 1)ans = ans /n *(n-1);
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ll ans;
scanf("%lld",&ans);
ans =euler(ans);
printf("%lld\n",ans);
}
return 0;
}