hdu 1211
这题就是 要你找出一个ASCII 的值x使得 : x^e%n==num(当前输入的数,e条件已给出)
zsd:
1: ASCII0-255可以枚举
2:
=a^11 11=1011
int pow2( int a, int b )
{
int r = 1, base = a;
while( b != 0 )
{
if( b % 2 )
r *= base;
base *= base; //a^x x=1 2 4 8 16 也就是2^x
b /= 2;
}
return r;
}
3:(x*y)%d=(x%d)*(y%d)
#include<iostream>
using namespace std;
bool funtion(int x,int e,int n,int num)
{// m^n % k
int b = 1;
while (e > 0)
{
if (e & 1)
b = (b*x)%n;
e = e >> 1 ;
x = (x*x)%n;
}
if(b==num) return true;
return false;
}
int main()
{
int p,q,e,l,c,n;
while(scanf("%d%d%d%d",&p,&q,&e,&l)!=EOF)
{
n=p*q;
while(l--)
{
scanf("%d",&c);
for(int i=0;i<=255;i++)
if(funtion(i,e,n,c))
{
printf("%c",i);
break;
}
}
printf("\n");
}
return 0;
}
4:貌似没有用到模线性方程
#include<iostream>
using namespace std;
bool funtion(int x,int e,int n,int num)
{// m^n % k
int b = 1;
while (e > 0)
{
if (e & 1)
b = (b*x)%n;
e = e >> 1 ;
x = (x*x)%n;
}
if(b==num) return true;
return false;
}
int main()
{
int p,q,e,l,c,n;
while(scanf("%d%d%d%d",&p,&q,&e,&l)!=EOF)
{
n=p*q;
while(l--)
{
scanf("%d",&c);
for(int i=0;i<=255;i++)
if(funtion(i,e,n,c))
{
printf("%c",i);
break;
}
}
printf("\n");
}
return 0;
}

浙公网安备 33010602011771号