信息安全中求解模P平方剩余与模P平方非剩余问题的求解方法
可以求解1000 以为的奇素数的平方剩余与平方非剩余
以及快速排序算法的简单实现。
#include <iostream>
using namespace std;
void see (int a[],int b,int n){
for(int i=0;i<n;i++){
if(a[i]==b)
a[i]=0;
}
}
int sprt(int a[],int left,int right){
int temp=a[right];
int l=left;
int r=right;
while(l!=r){
while(a[l]<=temp&&l<r){
l++;
}
if(l<r&&(a[l]>temp)){
a[r]=a[l];
r--;
}
while(a[r]>=temp&&(l<r)){
r--;
}
if(l<r&&(temp>a[r])){
a[l]=a[r];
l++;
}
}
a[l]=temp;
return r;
}
void quiksort(int a[],int left,int right){
if(left<right){
int mid=(left+right)/2;
int temp=a[mid];
a[mid]=a[right];
a[right]=temp;
mid=sprt(a,left,right);
quiksort(a,left,mid-1);
quiksort(a,mid+1,right);
}
else{
return;
}
}
int main()
{
int arb[1000];
int arra [1000];
for(int i=0;i<1000;i++){
arra[i]=i+1;
}
int a;
cin>>a;
for(int i=1;i<=a/2;i++){
int b;
b=(i*i)%a;
arb[i]=b;
see(arra,b,a);
}
for(int i=1;i<=a/2;i++){
cout<<arb[i]<<" ";
}
cout<<endl;
cout<<"模"<<a<<"平方剩余为:"<<" ";
quiksort(arb,1,a/2);
for(int i=1;i<=a/2;i++){
cout<<arb[i]<<" ";
}
cout<<endl;
cout<<"模"<<a<<"平方剩余为:"<<" ";
for(int i=1;i<a;i++){
if(arra[i]!=0){
cout << arra[i]<<" ";
}
}
cout<<endl;
return 0;
}