用C语言如何编写100~9999内超级素数的相关问题
超级素数:一个素数依次从低位去掉一位、两位……若所得的数依然是素数如239是超级素数。试求100~9999之内:(1)超级素数的个数;(2)所有超级素数之和;(3)最大的...
超级素数:一个素数依次从低位去掉一位、两位……若所得的数依然是素数如239是超级素数。试求100~9999之内:
(1)超级素数的个数;
(2)所有超级素数之和;
(3)最大的超级素数。 展开
(1)超级素数的个数;
(2)所有超级素数之和;
(3)最大的超级素数。 展开
5个回答
展开全部
个数 和 最大 都不难 关键是找素数,给你代码吧,还有这个不叫超级素数 叫连环素数!
输入5 就有5位 依次类推
#include<stdio.h>
#include<math.h>
bool GetP(int n)
{
if(n==2) return false;
for(int i=2;i<=sqrt(n)+1;i++)
if(n%i==0)
return true;
return false;
}
void dfs(int k,int cnt,int n)
{
if(GetP(k)) return;
if(cnt==n){printf("%d\n",k);return;}
for(int i=1;i<=9;i+=2)
{
int t=k*10;
dfs(t+i,cnt+1,n);
}
}
int main()
{
int n,m=1;
scanf("%d",&n);
for(int i=2;i<=9;i+=m)
{
dfs(i,1,n);
if(i==3) m++;
}
}
输入5 就有5位 依次类推
#include<stdio.h>
#include<math.h>
bool GetP(int n)
{
if(n==2) return false;
for(int i=2;i<=sqrt(n)+1;i++)
if(n%i==0)
return true;
return false;
}
void dfs(int k,int cnt,int n)
{
if(GetP(k)) return;
if(cnt==n){printf("%d\n",k);return;}
for(int i=1;i<=9;i+=2)
{
int t=k*10;
dfs(t+i,cnt+1,n);
}
}
int main()
{
int n,m=1;
scanf("%d",&n);
for(int i=2;i<=9;i+=m)
{
dfs(i,1,n);
if(i==3) m++;
}
}
2010-04-29
展开全部
#include <stdio.h>
#include <math.h>
bool is_prime(int n);
bool is_super_prime(int n);
bool is_prime(int n)
{
int i;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return false;
}
return true;
}
bool is_super_prime(int n)
{
while(n>0)
{
if (is_prime(n))
n=(int)(n/10);
else
return false;
}
return true;
}
void main()
{
int i,sum=0,num=0,max=0,temp=0;
for(i=100;i<=9999;i++)
{
if (is_super_prime(i))
{
num++;
sum+=i;
if(max<i)
max=i;
}
}
printf("100-9999的超级素数的个数是:%d\n",num);
printf("100-9999的超级素数的和是:%d\n",sum);
printf("100-9999的最大的超级素数是:%d\n",max);
}
#include <math.h>
bool is_prime(int n);
bool is_super_prime(int n);
bool is_prime(int n)
{
int i;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return false;
}
return true;
}
bool is_super_prime(int n)
{
while(n>0)
{
if (is_prime(n))
n=(int)(n/10);
else
return false;
}
return true;
}
void main()
{
int i,sum=0,num=0,max=0,temp=0;
for(i=100;i<=9999;i++)
{
if (is_super_prime(i))
{
num++;
sum+=i;
if(max<i)
max=i;
}
}
printf("100-9999的超级素数的个数是:%d\n",num);
printf("100-9999的超级素数的和是:%d\n",sum);
printf("100-9999的最大的超级素数是:%d\n",max);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
个数
和
最大
都不难
关键是找素数,给你代码吧,还有这个不叫超级素数
叫连环素数!
输入5
就有5位
依次类推
#include<stdio.h>
#include<math.h>
bool
GetP(int
n)
{
if(n==2)
return
false;
for(int
i=2;i<=sqrt(n)+1;i++)
if(n%i==0)
return
true;
return
false;
}
void
dfs(int
k,int
cnt,int
n)
{
if(GetP(k))
return;
if(cnt==n){printf("%d\n",k);return;}
for(int
i=1;i<=9;i+=2)
{
int
t=k*10;
dfs(t+i,cnt+1,n);
}
}
int
main()
{
int
n,m=1;
scanf("%d",&n);
for(int
i=2;i<=9;i+=m)
{
dfs(i,1,n);
if(i==3)
m++;
}
}
和
最大
都不难
关键是找素数,给你代码吧,还有这个不叫超级素数
叫连环素数!
输入5
就有5位
依次类推
#include<stdio.h>
#include<math.h>
bool
GetP(int
n)
{
if(n==2)
return
false;
for(int
i=2;i<=sqrt(n)+1;i++)
if(n%i==0)
return
true;
return
false;
}
void
dfs(int
k,int
cnt,int
n)
{
if(GetP(k))
return;
if(cnt==n){printf("%d\n",k);return;}
for(int
i=1;i<=9;i+=2)
{
int
t=k*10;
dfs(t+i,cnt+1,n);
}
}
int
main()
{
int
n,m=1;
scanf("%d",&n);
for(int
i=2;i<=9;i+=m)
{
dfs(i,1,n);
if(i==3)
m++;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
int sp(int n)
{
int t, i,m;
for(i = 1;i <= n;i++)
{
t= n % i;
if(t==0 && i != 1 && i != n || n == 1)
{
m = 0;
break;
}
else m = 1;
}
return m;
}
int spor(int n)
{
int m,y,z;
y = n / 10;
z = n / 100;
if(sp(n))
if(sp(y))
m = sp(z);
return m;
}
main()
{
int n , max = 0,i = 0,sum = 0;
for(n=100;n<=999;n++)
{
if(spor(n)==1)
{
i++;
sum = sum + n;
max = n;
}
}
for(n=1000;n<=9999;n++)
{
if(spor(n)==1)
{
if(sp(n / 1000)==1)
{
i++;
sum = sum + n;
max = n;
}
}
}
printf("超级素数个数为%d\n所有超级素数之和为%d\n最大的超级素数为%d\n" , i , sum , max);
}
int sp(int n)
{
int t, i,m;
for(i = 1;i <= n;i++)
{
t= n % i;
if(t==0 && i != 1 && i != n || n == 1)
{
m = 0;
break;
}
else m = 1;
}
return m;
}
int spor(int n)
{
int m,y,z;
y = n / 10;
z = n / 100;
if(sp(n))
if(sp(y))
m = sp(z);
return m;
}
main()
{
int n , max = 0,i = 0,sum = 0;
for(n=100;n<=999;n++)
{
if(spor(n)==1)
{
i++;
sum = sum + n;
max = n;
}
}
for(n=1000;n<=9999;n++)
{
if(spor(n)==1)
{
if(sp(n / 1000)==1)
{
i++;
sum = sum + n;
max = n;
}
}
}
printf("超级素数个数为%d\n所有超级素数之和为%d\n最大的超级素数为%d\n" , i , sum , max);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include
<stdio.h>
#include
<math.h>
bool
is_prime(int
n);
bool
is_super_prime(int
n);
bool
is_prime(int
n)
{
int
i;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return
false;
}
return
true;
}
bool
is_super_prime(int
n)
{
while(n>0)
{
if
(is_prime(n))
n=(int)(n/10);
else
return
false;
}
return
true;
}
void
main()
{
int
i,sum=0,num=0,max=0,temp=0;
for(i=100;i<=9999;i++)
{
if
(is_super_prime(i))
{
num++;
sum+=i;
if(max<i)
max=i;
}
}
printf("100-9999的超级素数的个数是:%d\n",num);
printf("100-9999的超级素数的和是:%d\n",sum);
printf("100-9999的最大的超级素数是:%d\n",max);
}
<stdio.h>
#include
<math.h>
bool
is_prime(int
n);
bool
is_super_prime(int
n);
bool
is_prime(int
n)
{
int
i;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return
false;
}
return
true;
}
bool
is_super_prime(int
n)
{
while(n>0)
{
if
(is_prime(n))
n=(int)(n/10);
else
return
false;
}
return
true;
}
void
main()
{
int
i,sum=0,num=0,max=0,temp=0;
for(i=100;i<=9999;i++)
{
if
(is_super_prime(i))
{
num++;
sum+=i;
if(max<i)
max=i;
}
}
printf("100-9999的超级素数的个数是:%d\n",num);
printf("100-9999的超级素数的和是:%d\n",sum);
printf("100-9999的最大的超级素数是:%d\n",max);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询