题目链接:1116
枚举进制数--
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
char ch[100100];
int shu[100100],a[100100];
scanf("%s",ch);
int ll=strlen(ch);
int jin=0;
for (int i=0;i<ll;i++)
{
if (ch[i]<='9')
shu[i]=ch[i]-'0';
else
shu[i]=ch[i]-'A'+10;
jin=max(jin,shu[i]);
}
jin++;
if (jin==1)
{
printf("2\n");
return 0;
}
bool fafe=true;
for (int i=jin;i<=36;i++)
{
memcpy(a,shu,sizeof(shu));
int yu=0;int bei=i-1;
for (int j=ll-1;j>=0;j--)
{
yu=(yu*i+a[j])%bei;
}
if (yu==0)
{
printf("%d\n",i);
fafe=false;
break;
}
}
if (fafe)
printf("No Solution\n");
return 0;
}
题目链接:1179
把每个数的约数在一个表中打出来-.-然后从大到小输出第一个出现两次的数--
代码:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[50050],shu[1000100];
int main()
{
memset(shu,0,sizeof(shu));
int n;scanf("%d",&n);
for (int i=0;i<n;i++)
{
scanf("%d",&a[i]);
int op=sqrt(a[i]);
for (int j=1;j<=op;j++)
if (a[i]%j==0)
{
shu[j]++;
shu[a[i]/j]++;
}
if (a[i]%op==0)
shu[op]--;
}
for (int i=1000000;i>0;i--)
{
if (shu[i]>1)
{
printf("%d\n",i);break;
}
}
return 0;
}