C语言求1到100的素数

我们刚学C不久,老师叫做个这个,我写的是
#include <stdio.h>
int isprime(int n){
int m;
for(m=2;m*m<=n;++m){
if(n%m==0)
return 0;
else
printf("%d ",n);}
}
int main(){
int n;
for(n=1;n<=100;++n){
isprime(n);
}
getch();

return 0;

}

结果输出的结果第一不全是素数,第二有好多数重复。不知道怎么改,求助高手。
别讲或者改太复杂啊,我们刚学没多久,谢谢

除了2,所有素数都是奇数,所以只考查>2的奇数;奇数肯定不能被偶数尽除,所以除数也只用奇数,且用j*j<=i这种形式控制循环,避免开方计算。
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
    int i,j,k;
    printf("Prime Numbers between 1 to 100 are as follows:\n2 ");
    for(i=3;i<100;i+=2){//除了2只考查奇数,避免穷举
        for(j=3;(k=j*j)<=i;j+=2)//只用奇数去除,且j*j<=i限制循环以提高时效
            if(i%j==0) break;
        if(k>i)
            printf("%d ",i);
    }
    printf("\n");
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-26
我给你讲讲原理吧,1到100这100个数.①,偶数一定不是素数,所以素数在3,5,7,..99中选②假设s是那个范围奇数,让s分别除以2,3,4,...s-1,如果都不能整出则s是素数至于代码就如1楼所写
第2个回答  2011-11-30
#include <stdio.h>
#include<math.h>
int isprime(int n){
int m;
for(m=2;m<=sqrt(n);++m){
if(n%m==0)
return 0;
}
printf("%d ",n);
}
int main(){
int n;
for(n=2;n<=100;++n){
isprime(n);
}

return 0;

}
在你的基础上改的,不明白可以hi我,在线给你讲一下本回答被提问者采纳
第3个回答  2011-11-30
#include <stdio.h>
#include <math.h>
int ss(int n) /*检查n是否为素数,如果是则返回1,否则返回0*/
{
int i;
if(n<2) return 0;
for (i=2; i<=(int)sqrt((double)n); i++)
if (n%i==0) return 0;
return 1;
}
int main(void)
{
int i,j=0;
for (i=1; i<=100; i++)
if(ss(i))
{
j++;
printf("%5d",i);
if (j%6==0) printf("\n");
}
printf("\ntotal prime=%d\n",j);
return 0;
}
第4个回答  2011-11-30
using System;
class Prime
{
static void Main()
{
int sum = 1;
Console.Write(2 + " ");
for(int m=3;m<=100;m+=2)
{
bool a = true;
if(m%2==0)
{
a = false;
}
else
{
for(int i=3;i<m/2;i+=2)
{
if(m%i==0)
{
a = false;
break;
}
}
}
if(a==true)
{
sum++;
Console.Write(m.ToString()+" ");
}
}
Console.WriteLine();
Console.WriteLine("total:" + sum);
}
}
相似回答