C语言编写超级素数

html-css012

C语言编写超级素数,第1张

超级素数是指从个位起删除0位、1位、2位……直到只剩最后1位都是素数的十进制正整数。可以自定义一个素数判断函数,对某一正整数n及从个位起每删除1位的新数逐一进行判断,都是素数的则是题解。以下代码先要求输入正整数n,输出2~n之间的所有超级素数:

#include "stdio.h"

int prime(int n){//判断素数,素数返回0,否则返回1

int i

if(n>2 && !(n&1) || n<2)

return 1

for(i=3i*i<=ni+=2)

if(!(n%i))

return 1

return 0

}

int main(int argc,char *argv[]){

int n,i,t

printf("Input n(int n>1)...\nn=")

if(scanf("%d",&n)!=1 || n<2){

printf("Input error, exit...\n")

return 0

}

for(i=2i<=ni++){

for(t=itt/=10)//从低位删除0位,1位...直到只剩1位都是素数的为超级素数

if(prime(t))

break

if(!t)

printf("%d ",i)

}

printf("\n")

return 0

}

运行样例如下:

比如页面上有一个文本框,可以输入任意数字,有一个按钮,点击计算。我要获取文本框输入的值,传入一个函数参数内,点击按钮时,调用该函数实现输出0到该输入的数字之间的质数。怎么动态传入获取的值呢?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/htmlcharset=utf-8" />

<title>输出质数</title>

<style type="text/css">

#main{

text-align: center

}

#btn{

width: 25%

height: 25px

}

</style>

</head>

<body>

<div id="main">

<h3>请输入一个大于零的数字,输出零到该数字之间的质数</h3>

<form>

<input type="text" id="btn" name="btn" placeholder="请输入一个大于零的数字" />

<input type="button" id="btn2" name="btn2" value="点击计算" onclick="outputPrime()" /> //这里怎么传入参数呢?

</form>

<div>

<p id="result"></p>

</div>

</div>

<script type="text/JavaScript">

var prime = document.getElementById("btn").value

var result = document.getElementById("result")

var btncli = document.getElementById("btn2")

//输出零到指定数字以内的质数

function outputPrime(num){

var arr = []

for(var i=2i<=numi++){

if(i == 2){

console.log(i)

arr.push(i)

}else if(i%2 != 0){

for(var j=2j<ij++){

if(i%j == 0){

break

}else if(j == i-1){

console.log(i)

arr.push(i)

result.innerHTML = arr

}

}

}

}

}

</script>

</body>

</html>

for(let i=1i<=100i++){

if(check(i)) {

console.log(i)

}

}

// 判断当前给定的数 num 是否为素数, 是素数返回 true, 否则返回 false

function check(num){

if(num === 1) {

// 1 不是素数也不是合数, 返回 false

return false

} else {

// 声明变量用于统计从1~根号下 num,之间 能被 num 整除的数的个数

let count = 0

for(let i=1i<=Math.sqrt(num)i++) {

if(num%i === 0) {

count++

// 当发现在1~根号下 num 之间有超过1个数可以被 num 整除, 说明 num 一定不是素数,直接返回false, 后面的数不用判断了

if(count >1) {

return false

}

}

}

// 因为素数只能被1和自身整除,

// 那么从1~根号下 num 之间一定只有一个数(1)可以被 num 整除, 所以当 count 等于1时, 这个num 就是素数

return count == 1

}

return false

}