URAL 1375. Bill Clevers

来源:互联网 发布:奇迹暖暖 网络连接失败 编辑:程序博客网 时间:2024/05/16 17:28


先预处理0~p-1 的平方除以p的余数。然后要使两数和 的余数是 k 只有两种可能,  a+b=k 或者 a+b=p+k 

枚举余数的情况,就行了。


#define FOR(i,n) for(long long (i)=1;(i)<=(n);(i)++)#define For(i,n) for(long long (i)=0;(i)<(n);(i)++)using namespace std;int r[1000000];int k,p;int main(void){For(i,1000000) r[i]=-1;while(cin>>k>>p){For(i,p){int D=(int)((i*i)%p);if(!~r[D]){r[D]=i;}}if(~r[0]&&~r[k]){printf("%d %d\n",r[0],r[k]);continue;}int T=0;for(int i=1;i<k;i++){if(~r[i]&&~r[k-i]){printf("%d %d\n",r[i],r[k-i]);T=1;break;}}if(T) continue;for(int i=k+1;i<=p-1;i++){if(~r[i]&&~r[p+k-i]){printf("%d %d\n",r[i],r[p+k-i]);T=1;break;}}if(T) continue;printf("NO SOLUTION\n");}return 0;}

 


0 0
原创粉丝点击