C语言编程:输出1到N中所有质数的个数

C语言编程:输出1到N中所有质数的个数,第1张

#include

#include

#include

int

panduan(int

n)

{

int

i=2;

for(i;i<=sqrt(n);++i)

//判断是质数只用到n的平方根就好

if(n%i==0)

return

0;

//余数为0,说明n有约数,所以返回0

return

1;

//表示没有余数返回1

}

int

main()

{

int

a=2,i=2,t=100000,n;

printf("输入n:");

scanf("%d",&n);

printf("1~%d之间的质数有:",n);

//

printf("%d",a);

//可以在后边输出

这个可以省略

if(n<=100000&&n>1)

//如果是while(),将是一个死循环,程序不会停止,用if做判断

{

do

{

if

(panduan(i))

//i%a是判断奇数的不是判断质数的,我做了一个程序调用

printf("%d

",i);

++i;

}

while(i<=n);//如果只是i

评论

0

0

加载更多

有救!有救!

你的思路挺好的,就是编程的时候思路不清晰,没有周全考虑。

这是改后的代码

#include "stdioh"

#include "conioh"

main()

{ int m,n,i,num;

int p[100];

long s;

s=2;

m=1;

n=1;

num=1;

p[1]=2 ;

for (;num<100;num++)/这里的分号应该是你笔误吧O(∩_∩)O/

{for (i=1,n=2;;) /这里n=2而非m估计也是你笔误?/

{m=p[i] ;

if (m>s/2) break;

else if(mn<s) n++;

else if(mn==s) {s++;i=1;n=2;}/这里/

else if(mn>s) {i++;n=2;}/和这里,仔细想一想,当尝试一个新的数字或尝试一个新的质数时,是不是要把计数变量初始化?/

/编程的时候不要想当然,要通盘考虑,每个变量是否都做了妥善的处理/

}

p[num]=s;/你要用质数表,怎么能不记录质数表呢^o^/

printf ("p%d=%ld\n",num,s);

s++;

}

getch();

}

你的程序运用质数表这点很好,但是你的程序还没发挥到最高效率。里边有一些无用的判断和赋值,而且没有利用mod运算,使程序既复杂又低效。

我觉得还是用标准的求质数算法比较好,到处都有,不再说了。

#include<stdioh>

#include <mathh>

void main()

{ int zhi(int);

int j=0,b[20]={1,3,7,9},a[20]={2,3,5,7},c,l=4,d[20],n,g=0,h=0,i,N,s=10,z,f;

scanf("%d",&N);

for(i=1;i<=N-1;i++)

{

for(j=0;j<l;j++)

{

n=a[j]s;

f=n;

for(h=0;h<4;h++)

{ n=n+b[h];

c=zhi(n);

if(c==1)

d[++g]=n;

n=f;

}

}

for(j=0;j<g;j++)

a[j]=d[j+1];

l=g,z=g,g=0;

}

if(N==1)

printf("2\n3\n5\n7\n");

else

for(j=1;j<=z;j++)

printf("%d\n",d[j]);

}

int zhi(int m)

{ int k,i,c=0;

k=(int)sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>k) c=1;

return c;

}

这是我以前写过的判断质数的程序,希望对你有帮助。

#include<stdioh>

int

prime(int

a)

{

int

i;

for(i=2;i<=a/2;i++)

{

if(a%i==0)

break;

}

if(i>a/2)

return

1;

else

return

0;

}

int

main(void)

{

int

x;

printf("请输入一个整数:");

scanf("%d",&x);

if(prime(x))

printf("%d为素数\n",x);

else

printf("%d不是素数\n",x);

}

主要是加了break

#include<stdioh>

int main()

{

int i,j;

int count=0;

for(i=2;i<100;i++)

{

for(j=2;j<=i/2;j++)

if(i%j==0)//如果i能被j整除  就不是质数  退出循环

break;

if(j>i/2)

{

count++;

printf("%-3d",i);

if(count%5==0)//当每一行有5个数时  换行

printf("\n");

}

}

return 0;

}

for(j=2;j<=i/2;j++)中的 j<=i/2是表示  从j=2开始遍历到j=i/2  看看2~i/2中能否整除i

如果都不能  说明i是质数(也就是j>i/2)

如果有1个及以上能整除i  说明i不是质数

for()

{

}

//for循环结束之后  j的值是大于i/2的  因为for循环的条件是:j<=i/2

//因此  当j>i/2时  for循环结束

if(j>i/2)

这里当且仅当2~i/2都不能整除i时   也就是j>i/2  才说明i是质数

参考资料

输出100以内的质数,用c语言如何编写?百度知道[引用时间2017-12-25]

新建一个Win32 Console Application,创建一个Hello World!程序,把如下代码粘进去运行。

#include "stdafxh"

#include <stdioh>

void main()

{

int a,k=0;

printf("请输入大于1的正整数:");

scanf("%d",&a);

for(int i=2;i<a;i++)

if(a%i==0) {k=1;break;}

if(k) printf("%d不是质数!可以被%d整除!\n",a,i);

else printf("%d是质数!\n",a);

}

以上就是关于C语言编程:输出1到N中所有质数的个数全部的内容,包括:C语言编程:输出1到N中所有质数的个数、c语言求质数、c语言判断质数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9290132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存