求1到100的素数(50分)

programhjh 2008-07-14 08:26:39
求1到100的素数(50分)
...全文
3740 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITOfficeBoy 2010-03-09
  • 打赏
  • 举报
回复
17楼的朋友,这个算法是有问题的。
比如如果121(11的平方)是合数,但还是打印出来喽。还有13*13,17*17...
引用 17 楼 oracle_louis 的回复:
我来个土方子!
嘻嘻!

for(i=2,i <=100,i++)
    {
      if i == 2
      {
        Console.WriteLine(i.ToString());
      }
      else
      {
        if i%2 == 0
        {
          continue;
        }
        else
        {
          if i == 3
          {
            Console.WriteLine(i.ToString());
          }
          else
          {
            if i%3 == 0
            {
              continue;
            }
            else
            {
              if i == 5
              {
                Console.WriteLine(i.ToString());
              }
              else
              {
                if i%5 == 0
                {
                  continue;
                }
                else
                {
                  if i == 7
                  {
                    Console.WriteLine(i.ToString());
                  }
                  else
                  {
                    if i%7 == 0
                    {
                      continue;
                    }
                    else
                    {
                      Console.WriteLine(i.ToString());
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
helao666 2009-09-05
  • 打赏
  • 举报
回复
printf("2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97");
pkbilly 2008-08-01
  • 打赏
  • 举报
回复

public class Testsushu{
public static void chose() {
for(int i= 1;i<=100;i++){
boolean f = true;
for(int j=2;j<i;j++){
if(i%j==0){
f = false;
break;
}
}
if(f) System.out.print(i + " ");
}
}
public static void main(String args[]){
chose();
}
}

xfjds1987 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 scarsty 的回复:]
printf("2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97");
[/Quote]
这种最快~
emile02220 2008-07-15
  • 打赏
  • 举报
回复
昏,好久没做这种题目了~~
walkghost 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 scarsty 的回复:]
printf("2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97");
[/Quote]
还是这个比较强大。
walkghost 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cai3725 的回复:]
素数。好久没做这个题了。哈
以前做例子用的,都快忘了什么是素数了
[/Quote]
征服者X 2008-07-15
  • 打赏
  • 举报
回复
没事交流思想?
suyiming 2008-07-15
  • 打赏
  • 举报
回复
快乐很好很强大
oracle_louis 2008-07-15
  • 打赏
  • 举报
回复
我来个土方子!
嘻嘻!

for(i=2,i<=100,i++)
{
if i == 2
{
Console.WriteLine(i.ToString());
}
else
{
if i%2 == 0
{
continue;
}
else
{
if i == 3
{
Console.WriteLine(i.ToString());
}
else
{
if i%3 == 0
{
continue;
}
else
{
if i == 5
{
Console.WriteLine(i.ToString());
}
else
{
if i%5 == 0
{
continue;
}
else
{
if i == 7
{
Console.WriteLine(i.ToString());
}
else
{
if i%7 == 0
{
continue;
}
else
{
Console.WriteLine(i.ToString());
}
}
}
}
}
}
}
}
}
gomoku 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 syeerzy 的回复:]
int MAX_NUM = 100; //最大
List <int> primes = new List <int>(); //保存所有找到的质数
primes.Add(2); //2是第一个质数也是唯一的偶数
for(int i = 3; i <= MAX_NUM; i+=2 ) //2以上的所有偶数其实都根本不需要算
{
for( int j = 0;primes[j]*primes[j] < i; ++j ) //<-------
{
if( i%primes[j] == 0 )
goto NOT_PRIME;// i能被整除就跳到NOT_PRIME
}
primes.Add(i); //将质数保存
NOT_PRIME:
continue;
}
[/Quote]

A small error correction (for 9, 25, 49...):
for( int j = 0;primes[j]*primes[j] <= i; ++j )
yagebu1983 2008-07-15
  • 打赏
  • 举报
回复
呵呵!!!
学习一下!!
  • 打赏
  • 举报
回复
你的算法不是很好理解,学习中..
wangguyue86 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 Macosx 的回复:]
当内存够用的时候 筛选法速度更快
class Program
{
static void Main(string[] args)
{
var max = 101;
var isPrime = Enumerable.Repeat(true, 101).ToArray();

isPrime[0] = isPrime[1] = false;

for (int i = 2; i < max; i++)
{
if (isPrime[i])
{

[/Quote]
给解释一下
Macosx 2008-07-15
  • 打赏
  • 举报
回复
当内存够用的时候 筛选法速度更快
class Program
{
static void Main(string[] args)
{
var max = 101;
var isPrime = Enumerable.Repeat(true, 101).ToArray();

isPrime[0] = isPrime[1] = false;

for (int i = 2; i < max; i++)
{
if (isPrime[i])
{
for (int j = i + i; j < 101; j += i)
{
isPrime[j] = false;
}
}
}

for (int i = 0; i < max; i++)
{
if(isPrime[i])
Console.WriteLine(i);
}
}
}

如果要求100000000以内的所有质数就不能这么做了
sxmonsy 2008-07-15
  • 打赏
  • 举报
回复
LZ这是你们老师出的作业题吗?
七楼大哥的

int MAX_NUM = 100; //最大
List <int> primes = new List <int>(); //保存所有找到的质数
primes.Add(2); //2是第一个质数也是唯一的偶数
for(int i = 3; i <= MAX_NUM; i+=2 ) //2以上的所有偶数其实都根本不需要算
{
for( int j = 0;primes[j]*primes[j] < i; ++j )
{
if( i%primes[j] == 0 )
goto NOT_PRIME;// i能被整除就跳到NOT_PRIME
}
primes.Add(i); //将质数保存
NOT_PRIME:
continue;
}


shadowgreen 2008-07-15
  • 打赏
  • 举报
回复
学习了
帮顶
GhostAdai 2008-07-15
  • 打赏
  • 举报
回复
for(int i = 2; i <= Math.sqrt(MAX_NUM); i++ )
这个应该是x,还有方法中S应该大写,即改成这样:
for(int i = 2; i <= Math.Sqrt(x); i++ )

我晕,刚在另一贴里骂完人,有点心急了,老犯这些低级错误,大家原谅则个,瀑布寒自己先!
GhostAdai 2008-07-15
  • 打赏
  • 举报
回复
for(int x = 2;x= <MAX_NUM; x++ )
红色的这个打快了,真不好意思哈,发出了才看见,寒自己一个先!
GhostAdai 2008-07-15
  • 打赏
  • 举报
回复
如果是单纯打印出来就这样:

int MAX_NUM = 100;
for(int x = 2;x =< MAX_NUM; x++ )
{
bool flag = true;
for(int i = 2; i <= Math.sqrt(MAX_NUM); i++ )
{
if(x%i==0)
{
flag=false;
break;
}
}
if(flag)
{
Console.WriteLine(x);
}
}
说明:数学上可以证明:判断一个数是否为素数,只要判断从2到被它开方根后的数能否整除该数,能则不是,全部不能则是素数。所以循环只需循环到该数开平方的次数就行了。
加载更多回复(14)

111,028

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧