A. 用c语言如何编写100~9999内超级素数的相关问题
个数 和 最大 都不难 关键是找素数,给你代码吧,还有这个不叫超级素数 叫连环素数!
输入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++;
}
}
B. C语言求素数
#include<stdio.h>
#include<math.h>
voidmain()
{
intx=100,d=999,a,i,temp;
for(x;x<=d;x++)
{
temp=0;
a=sqrt(x);
for(i=2;i<=a;i++)
{
if(x%i==0)
{
temp=1;
break;
}
}
if(temp==0)
printf("%d",x);
}
}
C. c语言999到9999中的素数
你问的是c语言怎么计算999到9999中的素数吧?
#include
int main()
{
int i, j;
int count = 0;
for (i = 101; i <= 999; i++)
{
int flag = 1;
for (j = 2; j <= i - 1; j++)
{
if (i%j == 0) //如果不是素数,应该直接跳出循环,计算下一个i
{
flag=0; //并设置标志为0
break;
}
}
if (flag==1) //在循环之外判断标志,如果是break出来的,肯定flag = 0,即不是素数
{
count++;
printf("%-5d", i);
if (count % 10 == 0)
{
printf("
");}}}
return 0;
}
}
素数:只能被1和i本身整除1既不是质数也不是合数。
D. C语言 求最大素数
#include"stdio.h"
intprime(intn){//素数判断
inti;
if(n>2&&!(n&1)||n<2)
return0;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return0;
return1;
}
intmain(intargv,char*argc[]){
intn,s,t;
printf("Inputn(int1<n<=500)... n=");
if(scanf("%d",&n)!=1||n<2||n>500){
printf("Inputerror,exit... ");
return0;
}
for(t=s=0;t<10&&n>1;n--)
if(prime(n)){
printf("%6d",n);
s+=n;
t++;
}
printf(" sum=%d ",s);
return0;
}
运行样例:
E. c语言求超级素数
逻辑乱得有点厉害,如
for(n=2;n<m;n++)
if(m%n==0)
break;
这里的break;只结束for(n=2;...这个循环,还在前一个for(k=0;k<3;k++)循环中;可是break;就意味着m已经不是素数了,那么整个m所在的3位数就不是超级素数,还有什么必要继续做for(k=0;k<3;k++)这个循环?这种题比较好的结构是弄一个素数判断函数,不断用原数和它不断除以10的数调用,都返回“真”的就是超级素数,否则不是。代码如下——
#include"stdio.h"
intprime(intn){//素数
inti;
if(n>2&&!(n&1)||n<2)
return0;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return0;
return1;
}
intmain(intargc,char*argv[]){
inti,j,k;
for(k=0,i=101;i<=9999;i+=2){
for(j=i;j>0;j/=10)
if(!prime(j))
break;
if(!j)
printf(++k%10?"%5d":"%5d ",i);
}
if(k%10)
printf(" ");
return0;
}
运行结果:
F. 求写一个C语言程序,1000以内素数最大十个素数求和
#include"stdio.h"
intmain(intargv,char*argc[]){
intn,i,j,k;
printf("Theresultsareasfollows: ");
for(n=1,i=999;n<11;i-=2){
for(j=3;(k=j*j)<=i;j+=2)
if(i%j==0)
break;
if(k>i){
printf("%4d",i);
n++;
}
}
printf(" ");
return0;
}
运行结果:
G. c语言:求1000以内的素数并求出其中最大十个素数之和
通过您的程序可以看出,您想通过一维数组,来计算最大10个素数之和。但是您并没有将前10位素数赋值给一维数组,所以无法得出正确结果。
我根据您的题目要求,编写代码如下:
/*输出1至1000之间的素数,并求出其中最大十个素数之和......byMr.Kong*/
#include<stdio.h>
intisprime(inta);
main()
{
inti,s=0,n;
for(i=1000;i>=2;i--)/*将素数倒序输出,方便计算前10位素数*/
if(isprime(i))
{
n++;
printf("%d,",i);
if(n<=10)/*计算前10位素数的和*/
s+=i;
}
printf(" 最大十个素数之和s=%d",s);
}
intisprime(inta)/*定义函数,判断是否是素数*/
{
inti;
for(i=2;i<a;i++)
if(a%i==0)
return0;
return1;
}
H. 求100∼999中n个最大的素数并输出(c语言程序设计题,求大神)
最近刚做过的题,望采纳!
#include <stdio.h>
#include <math.h>
#include <malloc.h>
void Eratosthenes(int p, int lower, int upper, int *num, int *time)
{
int i, j;
for(i = lower; i<=upper; i++)
{
for(j = p; j < i; j++)
{
if(i%j == 0)
{
break;
}
}
if(j == i)
{
num[*time] = i;
(*time)++;
}
}
}
int main()
{
int lower, upper, k, time = 0;
int *num, i, j, a;
printf("Input lower( >=2) and upper:");
scanf("%d%d",&lower,&upper);
num = (int *)malloc(sizeof(int)*upper);
Eratosthenes(2, lower, upper, num, &time);
printf("一下输出%d到%d的素数:",lower,upper);
for(k = 0; k < time; k++)
{
printf("%d ", num[k]);
}
for(i=0; i<time; i++)
for(j=i+1; j<time; j++)
{
if(num[i]<num[j])
{
a=num[i];
num[i]=num[j];
num[j]=a;
}
}
printf("\n最大素数为:%d",num[0]);
free(num);
return 0;
}
I. C语言求“输出1000以内最大的10个素数以及它们的和”,求大神指教
#include<stdio.h>
#include<math.h>
bool isprime(int n)
{
int i;
for(i=2;i<=sqrt(n);i++)
if(n%i==0)
return false;
return true;
}
int main()
{
int i=999,sum=0,no=0;
while(no<10)
{
if(isprime(i))
{
sum+=i;
no++;
printf("%d\n",i);
}
i++;
}
printf("%d\n",sum);
return 0;
}
J. 用C语言循环结构求100至999之间最大嗯三个素数
#include<stdio.h>
int main()
{
int i,j,n;
printf("100~999之间最大的3个素数是:");
for(n=0,i=999;n<3&&i>100;i-=2)
{
for(j=2;j*j<=i;j++)
if(0==i%j)
break;
if(j*j>i)
{
n++;
printf(3==n ? "%d " : "%d,",i);
}
}
return 0;
}