a = eval(input("请输入一个数:"))
b = eval(input("请再次输入:"))
a = abs(a)
b = abs(b)
print(a)
if a < b :
a,b = b,a
r = a % b
while r :
a = b
b = r
r = a % b
print(b)
import math
def func(n):
if n==2 or n==3 :
return 1;
if n%6!=1 and n%6!=5:
return 0;
tmp = int(math.sqrt(n))
for i in range(5,tmp+1,6) :
if n%i==0 or n%(i+2)==0 :
return 0;
return 1;
lis = [i for i in range(2,10000)
if 1 == func(i)]
print(lis)
b = eval(input("输入底数:"))
r = eval(input("输入指数: "))
m = eval(input("输入模: "))
a = 1
for i in range(len(bin(r))-2):
n = int(bin(r)[-i-1])
if n == 1:
a = a * b % m
b = b * b % m
else:
b = b * b % m
print(a)
def func(m, n):
sum = 0
for i in range(1,m+1):
if n%i==0 and m%i == 0:
sum += 1
if sum > 1:
return 0
else:
return 1
C = eval(input("请输入"))
e = eval(input("请输入"))
n = eval(input("请输入"))
f = 0
for i in range(1,n):
if func(i,n)==1:
f += 1
print(f)
sum,x,y = max(e, f), e, f
r = 1
for i in range(1,sum):
if x%i==0 and y%i==0:
r = i
print(r)
a,b,c,d = 1,0,0,1
while x != r:
if x < y:
x,y,a,c,b,d = y,x,c,a,d,b
x = x - y
a = a - c
b = b - d
m = C**a
m = m%n
print(m)
一次同余式
计算最大公因式
def judge(a,m,b):
if a < m :
a,m = m,a
r = a % m
while r :
a = m
m = r
r = a % m
if b%m==0:
return m
else:
print("无解!")
return False
def Euclid(A, B, M, r):
a,b,m = int(A/r), int(B/r), int(M/r)
for i in range(1,m):
if a*i%m==1 or a*i%m==b:
print(i)
if a*i%m==b:
x = i
for i in range(r-1):
x += m
print(x)
if __name__ == "__main__":
A = eval(input("请输入x的系数:"))
B = eval(input("请输入x的余数:"))
M = eval(input("请输入X的模:"))
r = judge(A, B, M)
if r != False:
Euclid(A, B, M, r)
计算Legendre符号
搜索递归计算
def Legendre(a,b):
if a == 1:
return 1
if b % a == 0:
return 0
if a % 2 == 0:
return Legendre(int(a/2),b)*(-1)**int((b**2-1)/8)
return Legendre(b % a, a)*(-1)**int((a-1)*(b-1)/4)
if __name__ == '__main__':
for i in range(10):
a = eval(input("请输入:"))
b = eval(input("请输入:"))
print(Legendre(a,b))
import math
lis = [0 for i in range(55)]
def judge(num):
flag = True
for i in range(2,int((num**0.5))+1):
if num % i == 0:
flag = False
while num % i == 0:
lis[i] += 1
num = int(num/i)
return flag
def Eular(num):
if judge(num):
return num-1
else:
ans = num
for i in range(int((num**0.5)+1)):
if lis[i] != 0:
ans = int(ans/i)*(i-1)
return ans
def Pow(a, b, mod):
ans,base = 1,a%mod
while b!=0:
if b & 1 :
ans = ans * base % mod
base = (base**2) % mod
b *= 2
return ans
if __name__=='__main__':
x = eval(input("请输入:"))
ans = Eular(x)
for i in range(1, x):
for j in range(1,ans+1):
if Pow(i, j, x) == 1:
break
if j == ans:
print(i)
/*#include
using namespace std;
int ele[100000];
bool IsPrime(int num)
{
bool flag = true;
for(int i = 2; i <= sqrt(num); i++)
{
if(num % i == 0)
{
flag = false;
while(num % i == 0)
{
ele[i]++;
num /= i;
}
}
}
return flag;
}
int Euler(int num)
{
if(IsPrime(num))
return num-1;
else
{
int ans = num;
for(int i = 0; i <= sqrt(num); i++)
{
if(ele[i] != 0)
ans = (ans/i) * (i-1);
}
return ans;
}
}
int Pow(int a, int b, int mod)
{
int ans = 1, base = a%mod;
while(b != 0)
{
if(b & 1)
ans = (ans * base) % mod;
base = (base * base) % mod;
b >>= 1;
}
return ans;
}
int main()
{
int m;
while(scanf("%d", &m) != EOF)
{
int i, j;
int ans = Euler(m);
for(i = 1; i < m; i++)
{
for(j = 1; j <= ans; j++)
if(Pow(i, j, m) == 1)
break;
if(j == ans)
cout << i << endl;
}
}
return 0;
}
*/
/*
#include
#include
#include
#include
using namespace std;
int P;
const int NUM = 32170;
int prime[NUM/4];
bool f[NUM];
int pNum = 0;
void getPrime()//线性筛选素数
{
for (int i = 2; i < NUM; ++ i)
{
if (!f[i])
{
f[i] = 1;
prime[pNum++] = i;
}
for (int j = 0; j < pNum && i*prime[j] < NUM; ++ j)
{
f[i*prime[j]] = 1;
if (i%prime[j] == 0)
{
break;
}
}
}
}
__int64 getProduct(int a,int b,int P)//快速求次幂mod
{
__int64 ans = 1;
__int64 tmp = a;
while (b)
{
if (b&1)
{
ans = ans*tmp%P;
}
tmp = tmp*tmp%P;
b>>=1;
}
return ans;
}
bool judge(int num)//求num的所有的质因子
{
int elem[1000];
int elemNum = 0;
int k = P - 1;
for (int i = 0; i < pNum; ++ i)
{
bool flag = false;
while (!(k%prime[i]))
{
flag = true;
k /= prime[i];
}
if (flag)
{
elem[elemNum ++] = prime[i];
}
if (k==1)
{
break;
}
if (k/prime[i]> P)
{
for (int i = 2;;++i)
{
if (judge(i))
{
cout << i<< endl;
break;
}
}
}
return 0;
}
*/
#include
using namespace std;
const int maxn = 500000;
bool vis[maxn] = {0};
int pri[maxn / 10] = {0};
int phi[maxn] = {0};
int n,k;
int temp[maxn] = {0};
int cnt = 0;
long long int res[maxn] = {0};
void init ()
{
for (int i = 2; i < maxn; ++ i)
{
if (!vis[i])
{
pri[cnt ++] = i;
for (int j = i + i; j < maxn; j += i)
{
vis[j] = 1;
}
}
}
phi[1] = 1;
memset (vis,0,sizeof (vis));
for (int i = 2; i < maxn; ++ i)
{
if (!vis[i])
{
for (int j = i; j < maxn; j += i)
{
vis[j] = 1;
if (phi[j] == 0)
phi[j] = j;
phi[j] = phi[j] / i * (i - 1);
}
}
}
}
void div (int n)
{
k = 0;
for (int i = 0; pri[i] * pri[i] <= n; ++ i)
{
if (n % pri[i] == 0)
{
temp[k ++] = pri[i];
while (n % pri[i] == 0)
n /= pri[i];
}
}
if (n > 1)
temp[k ++] = n;
}
long long lpow (long long a,long long b,long long m)
{
long long ans = 1;
a %= m;
while (b)
{
if (b & 1)
{
ans = ans * a % m;
b --;
}
b >>= 1;
a = a * a % m;
}
return ans % m;
}
bool check (int n)
{
if (n == 2 || n == 4)
return true;
if (n % 2 == 0)
n /= 2;
if (binary_search (pri + 1,pri + cnt,n))
return true;
for (int i = 1; i < cnt && pri[i] * pri[i] <= n; ++ i)
{
if (n % pri[i] == 0)
{
while (n % pri[i] == 0)
{
n /= pri[i];
}
if (n == 1)
return true;
break;
}
}
return false;
}
int main ()
{
init ();
while (scanf ("%d",&n) != EOF)
{
if (n == 2)
{
printf ("1\n");
continue ;
}
if (check(n) == 0)
{
printf ("-1\n");
continue;
}
int tot = 0;
int p = phi[n];
div (p);
for (int q = 2; q < n; ++ q)
{
if (__gcd (q,n) != 1)
continue;
int flag = 1;
for (int i = 0; i < k; ++ i)
{
int t = p / temp[i];
if (lpow(q, t, n) % n == 1)
{
flag = 0;
break;
}
}
if(flag)
{
res[tot ++] = q;
break;
}
}
long long int cc = res[0];
tot = 0;
for (int i = 1; i < p; ++ i)
{
if (__gcd (i,p) == 1)
{
res[tot ++] = cc;
}
cc = cc * res[0] % n;
}
sort (res,res + tot);
if (tot)
{
printf ("%lld",res[0]);
for (int i = 1; i < tot; ++ i)
{
printf (" %lld",res[i]);
}
}
else
{
printf ("-1");
}
printf ("\n");
}
return 0;
}