一道简单的数学题;做这种数学题一是一定要彻底搞懂题意,不要似懂非懂就开始做。
二是要敢于和善于找规律,不要被题目给出的数字迷惑住;要懂得自己添加一些数据,这样才能更好的找出规律。
对于这道题:首先加法是不会对结果产生任何影响的;主要是乘法对结果产生影响(因为取模后,不同数的乘积可能相等)。我们不用对每一次的乘法都进行处理,可以将这些数都乘起来(同时取模),最后再进行一次处理,看能得到哪些结果。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int ans[65550],i,j,n;
long long a,k; //这两个数要定义为longlong类型
while(scanf("%d",&n)&&n)
{
int m,cnt=0;
char str[10];
k=1;
while(n--)
{
scanf("%s%d",str,&m);
if(str[0]=='M')
{
a=k*m;
k=a%65536;
}
}
memset(ans,0,sizeof(ans));
for(i=0;i<65536;i++)
{
a=i*k;
m=a%65536;
ans[m]=1;
}
for(i=0;i<65536;i++)
if(ans[i])
cnt++;
printf("%d\n",cnt);
}
}