用函数实现求100-200里面所有的素数

90 篇文章 2 订阅

用函数实现求100-200里面所有的素数

提示:素数的特征是除了1和其本身能被整除,其它数都不能被整除的数

代码如下:

# 判断一个数是不是素数
def test(num):
    list = []              #定义一个列表 用于存储计算的数
    i = num -1             # 去除本身
    while i > 1:           # 去除1
        if num %i == 0 :   #判断是否有余数
            list.append(i) # 将所有的能整除i的数加入列表
        i -= 1
    if len(list) == 0:     # 如果列表为空 就是表示除了1和它本身能整除
        print(num,end=' ')

def test2(start_num,end_num):
    j = start_num
    while j < end_num:
        test(j)
        j += 1
test2(100,2000)
print('')

输出结果:
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用C++实现Diffie-Hellman算法的代码示例,其中包括原根的函数: ```c++ #include <iostream> #include <cmath> #include <cstdlib> #include <ctime> using namespace std; // 判断一个数是否为素数 bool isPrime(int n) { if (n <= 1) { return false; } for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) { return false; } } return true; } // 一个数的原根 int getPrimitiveRoot(int p) { int phi = p - 1; int factors[100], cnt = 0; for (int i = 2; i <= sqrt(phi); i++) { if (phi % i == 0) { factors[cnt++] = i; while (phi % i == 0) { phi /= i; } } } if (phi > 1) { factors[cnt++] = phi; } for (int i = 2; i <= p; i++) { bool flag = true; for (int j = 0; j < cnt; j++) { if (pow(i, (p - 1) / factors[j]) % p == 1) { flag = false; break; } } if (flag) { return i; } } return -1; } // 利用Diffie-Hellman算法生成密钥 void generateKey(int p, int g, int& a, int& b, int& A, int& B) { srand(time(NULL)); // 初始化随机数种子 a = rand() % (p - 1) + 1; // 随机生成私钥a b = rand() % (p - 1) + 1; // 随机生成私钥b A = pow(g, a) % p; // 计算A = g^a mod p B = pow(g, b) % p; // 计算B = g^b mod p } // 利用生成的密钥计算共享密钥 int calculateKey(int p, int a, int b, int A, int B) { int Ka = pow(B, a) % p; // 计算Ka = B^a mod p int Kb = pow(A, b) % p; // 计算Kb = A^b mod p if (Ka == Kb) { return Ka; } else { return -1; } } int main() { int p, g, a, b, A, B; cout << "请输入一个大于2的素数p:"; cin >> p; if (!isPrime(p)) { cout << "输入的不是素数!" << endl; return 0; } g = getPrimitiveRoot(p); // p的原根 cout << "p的原根为:" << g << endl; generateKey(p, g, a, b, A, B); // 生成密钥 cout << "Alice的私钥a为:" << a << endl; cout << "Bob的私钥b为:" << b << endl; cout << "Alice的公钥A为:" << A << endl; cout << "Bob的公钥B为:" << B << endl; int key = calculateKey(p, a, b, A, B); // 计算共享密钥 cout << "共享密钥为:" << key << endl; return 0; } ``` 需要注意的是,该算法的安全性依赖于离散对数问题的困难性,因此需要选择足够大的素数p和原根g才能保证安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值