#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语言判断质数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)