程序编写:
实现RSA算法(书籍P40)。
1.判断一个正整数是否为质数的算法。函数签名如下
int isPrime(long a)
输入:一个长整数a
输出:返回1(为质数),返回0(非质数)
package 质数;
import java.util.Scanner;
public class shushu {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
int k;
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个正整数:");
k = scan.nextInt();
if(isPrime(k)==1)
{
System.out.println("你输入的数为质数.");
}
else
{
System.out.println("你输入的数为非质数.");
}
}
public static int isPrime(long num)
{
for(int i = 2 ;i <= num/2 ;i++)
{
if(num%i == 0)
{
return 0;
}
}
return 1;
}
}
2.随机生成一个n bit位的长整数。函数签名如下
long createRndInteger(int n)
输入:随机数bit位的长度为n(解释:3bit位,则最大为111,最小为100;n bit位,则该数字二进制长度为n)
输出:返回该随机数
package nbit;
import java.util.Scanner;
import java.util.Random;
public class nbitwei {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
int n;
Scanner scan = new Scanner(System.in);
System.out.println("请输入将要生成的随机数bit位的长度:");
n = scan.nextInt();
createRndInteger(n);
}
public static long createRndInteger(int n)
{
double max,min,sub;
max = Math.pow(2, n) - 1;
min = Math.pow(2,n-1);
sub = max - min ;
int r = (int)(sub*Math.random()+min);
String r1 = Integer.toBinaryString(r);
System.out.println(r1);
return r;
}
}
package 质数;
import java.util.Scanner;
public class shushu {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
int k;
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个正整数:");
k = scan.nextInt();
if(isPrime(k)==1)
{
System.out.println("你输入的数为质数.");
}
else
{
System.out.println("你输入的数为非质数.");
}
}
public static int isPrime(long num)
{
for(int i = 2 ;i <= num/2 ;i++)
{
if(num%i == 0)
{
return 0;
}
}
return 1;
}
}
2.随机生成一个n bit位的长整数。函数签名如下
long createRndInteger(int n)
输入:随机数bit位的长度为n(解释:3bit位,则最大为111,最小为100;n bit位,则该数字二进制长度为n)
输出:返回该随机数
package nbit;
import java.util.Scanner;
import java.util.Random;
public class nbitwei {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
int n;
Scanner scan = new Scanner(System.in);
System.out.println("请输入将要生成的随机数bit位的长度:");
n = scan.nextInt();
createRndInteger(n);
}
public static long createRndInteger(int n)
{
double max,min,sub;
max = Math.pow(2, n) - 1;
min = Math.pow(2,n-1);
sub = max - min ;
int r = (int)(sub*Math.random()+min);
String r1 = Integer.toBinaryString(r);
System.out.println(r1);
return r;
}
}