c语言函数四位数超级素数 最大素数c语言

编程序:查找四位正整数中的超级素数

这个代码没有采用for i=1000 to 9999这样的循环是出于运行速度考虑,代码看起来不如那样直观,但是比遍历1000-9999要少用很多素数判断,因此会快很多(因为1,2,3位超组素数只有4,9,14个,因此只需调用(4+9+14)*9次IsPrime函数即可找到所有4位数的超级素数,而用遍历1000-9999的办法则需要判断9000*4次)

成都创新互联拥有10余年成都网站建设工作经验,为各大企业提供网站设计、成都网站设计服务,对于网页设计、PC网站建设(电脑版网站建设)、手机APP定制开发、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、申请域名等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。

Option Explicit

Option Base 1

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

'这个是常规判断素数的函数

Private Function IsPrime(iNum As Long) As Boolean

Dim i As Long

IsPrime = True

For i = 2 To Sqr(iNum)

If iNum Mod i = 0 Then

IsPrime = False

Exit For

End If

Next

End Function

Sub main() '这是主程序

Const defdigits = 4 '这里指定超级素数的位数,可以指定为2-9之间任意整数

Dim i As Integer, j As Long '计数器

Dim iDigit As Integer '数字位数

Dim iFound As Integer '在当前位数上找到的超级素数的个数

Dim superPrimes() As Long '存储当前位的超级素数

Dim superPrimesOld() As Long '存储前一位所有的超级素数

iFound = 0

iDigit = 1

ReDim superPrimes(1) As Long '初始化数组

For j = 2 To 9 '先找一位的素数

If IsPrime(j) Then

iFound = iFound + 1

ReDim Preserve superPrimes(1 To iFound) As Long

superPrimes(iFound) = j

End If

Next

iDigit = 1

EnumSuperPrimes:

'把之前找到的所有超级素数放到一个“旧”数组中,并清空superPrimes数组

ReDim superPrimesOld(1 To UBound(superPrimes)) As Long

CopyMemory superPrimesOld(1), superPrimes(1), UBound(superPrimes) * 4

ReDim superPrimes(1) As Long

iFound = 0

iDigit = iDigit + 1

For j = 1 To UBound(superPrimesOld) '根据超级素数的定义查找iDigit位数字中所有的超级素数,找到后放到superPrimes数组中

For i = 1 To 9

If IsPrime(superPrimesOld(j) * 10 + i) Then

iFound = iFound + 1

ReDim Preserve superPrimes(1 To iFound) As Long

superPrimes(iFound) = superPrimesOld(j) * 10 + i

End If

Next

Next

If iDigit defdigits Then '检查数字位数是否达到要求,如果没有,则返回EnumSuperPrimes之后的语句继续执行

GoTo EnumSuperPrimes

Else '如果到达指定数字位数,则列出所有该位数上的超级素数

For i = 1 To UBound(superPrimes)

Debug.Print superPrimes(i)

Next

End If

End Sub

运算结果:

2333

2339

2393

2399

2939

3119

3137

3733

3739

3793

3797

5939

7193

7331

7333

7393

C语言编程:寻找四位数的超级素数。

C++:

#includeiostream

#includecmath

using namespace std;

bool isprime(int num)

{

int i;

for(i=2;isqrt(num);i++)

{

if(num%i==0)

return false;

}

return true;

}

void main()

{

int i;

for(i=1000;i10000;i++)

{

int m=i;

if(isprime(m))//4位数是否为素数

{

m/=10;

if((m!=0)(isprime(m)))//3位数是否为素数

{

m/=10;

if((m!=0)(isprime(m)))//2位数是否为素数

{

m/=10;

if((m!=0)(isprime(m)))//1位数是否为素数

{

couti' ';

}

}

}

}

}

coutendl;

}

C语言用函数调用求四位数的超级素数

VC++6.0下调试可用

/*

一个素数,依次从最高位去掉一位,两位……若得到的都是素数,且各数字不为0,则称为超级素数。

*/

#include "stdio.h"

#include "math.h"

int prime(int i)

{/*判断是否为素数*/

int j;

if(i==1) return 0;

for(j=2;j=sqrt(i);j++)

if(i%j==0) return 0;

return 1;

}

int IsSuperPrime(int i)

{/*判断此数是否为超级素数函数*/

if(prime(i)==1)

{

do{

i=i/10;

if(prime(i)==0) return 0;

}while(i=10);

return 1;

}

return 0;

}

void main()

{

int spn=0,num;

long sps=0;//所有4位数的超级素数的总和

for (num=1000;num10000;num++)

if(IsSuperPrime(num))

{

printf("%6d",num);

if(++spn%4==0)printf("\n");//每输出4个超级素数输出一个换行

sps+=num;

}

printf("\nsum=%ld,Total=%d\n",sps,spn);

}

C语言编程题:超级素数。

/**************************************

大体的思路:先求出1000-9999之间的素数,然后在这些素数中

找出前1、2、3、4位都是素数的数即为超级素数,每次找到一个

超级素数都与之前的超级素数加和,并且记录超级素数个数的变量加1,

并与之前找到的超级素数比较,记录最大的超级素数。

最后输出就可以了。

************************************/

#include stdio.h

#define MAX 10000

int prime[MAX] ; //prime数组记录1到9999每个数是否为素数,例如prime[9999]==1表示9999是素数

//searchPrime是找出1到9999之间的所有素数,并保存到prime数组

void searchPrime()

{

int i, j ;

for(i = 0; i MAX; i++)

prime[i] = 1 ; //所有元素初始化为1,即假定都是素数

prime[0] = 0 ;//0不是素数

prime[1] = 0 ;//1不是素数

//下面开始筛选素数

for(i = 2; i*i MAX; i++)

{

if(prime[i]) //如果i是素数,把它的倍数都筛掉

for(j = 2*i; j MAX; j+=i)

{

prime[j] = 0 ; //j是i的倍数,因此j最起码有一个因子是i,所以不可能是素数

}

}

}

int main()

{

int sum ; //sum记录超级素数的和

int i ;

int count ; //count记录超级素数的个数

int max ; //max记录最大的超级素数

int n ;

scanf("%d", n) ;

searchPrime() ; //初始化Prime数组

count = 0 ;

sum = 0 ;

max = 0 ;

for(i = 1001; i = n; i++)

{

if(prime[i] prime[i/1000]

prime[i/100] prime[i/10]) //说明i是超级素数

{

sum += i ;

count++ ;

if(max i)

max = i ;

}

}

printf("%d\n%d\n%d\n", count, sum, max) ;

return 0 ;

}

//写的仓促,只验证了9999,其他的数字并未验证,有问题再反馈吧。


网站标题:c语言函数四位数超级素数 最大素数c语言
文章链接:http://pwwzsj.com/article/hpgipi.html