c语言些RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个32位正整数,请对其进行因数分解,找出是哪两个素数的乘积。 输入描述: 一个正整数num num <= 2147483647人 输出描述 如果成功找到,以单个空格分割,从小到大输出两个素数,分解失败,请输出-1 -1
时间: 2023-11-27 20:05:57 浏览: 86
好的,这个问题可以使用试除法进行解决。具体的实现步骤如下:
```c
#include <stdio.h>
#include <math.h>
int is_prime(int n) {
if (n == 2) {
return 1;
}
if (n < 2 || n % 2 == 0) {
return 0;
}
int i;
for (i = 3; i <= sqrt(n); i += 2) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
int i, j;
for (i = 2; i <= num / 2; i++) {
if (is_prime(i) && num % i == 0) {
for (j = i + 1; j <= num / 2; j++) {
if (is_prime(j) && num == i * j) {
printf("%d %d\n", i, j);
return 0;
}
}
}
}
printf("-1 -1\n");
return 0;
}
```
该程序首先通过is_prime函数判断一个数是否为素数,然后在2到num/2的范围内进行循环,找到一个可以整除num的素数i,再在i+1到num/2的范围内寻找另一个素数j,如果找到了就输出i和j,否则输出-1 -1表示分解失败。
阅读全文