#include <iostream>
using namespace std;
const int MAXN = 100005;
int arr[100010];
long long p;
int main()
{
while (cin >> p)
{
if (p == 0)
break;
if (p == 2)
cout << "Impossible" << endl;
else
{
for (int i = 1; i < p; i++)
arr[i] = 1;
for (long long i = 1; i < p; i++)
arr[i * i % p] = 0;
for (int i = 1; i < p; i++)
cout << arr[i];
cout << endl;
}
}
return 0;
}
本文介绍了一个使用C++解决二次剩余问题的程序。通过输入一个质数p,程序将输出所有小于p且与p互质的数中,哪些数是二次剩余,即存在整数x使得x^2 ≡ a (mod p)。该程序首先检查p是否为2,如果是,则输出'Impossible',因为2没有二次剩余。对于大于2的质数p,程序将初始化一个数组arr,用于标记每个数是否为二次剩余。然后,通过计算每个数的平方模p的结果,程序更新arr数组,最终输出arr数组中值为1的数,这些数就是二次剩余。
721

被折叠的 条评论
为什么被折叠?



