标题:求素数失败···求高手帮忙看下
只看楼主
lzy013903
Rank: 1
等 级:新手上路
帖 子:23
专家分:7
注 册:2011-5-21
结帖率:90.91%
已结贴  问题点数:10 回复次数:15 
求素数失败···求高手帮忙看下
大概要求是在主函数中输入整数m,在fun函数中将所有的大于1小于m的素数存入xx所指数组,将素数个数传回主函数。

#include<stdio.h>
#include<math.h>
void main()
{
    int fun(int m,int xx[]);
    i,m,a[100],k;
    scanf("%d",&m);
    printf("\n");
    k=fun(m,a);
    for(i=0;i<k;i++)
    printf("%d\n",a[i]);
    printf("count : %d\n\n\n",k);
}

int fun(int m,int xx[])
{
    int z=0,i,j=0,n,q;
    for(i=2;i<m;i++)
    {
    q=sqrt(i);
    for(n=2;n<=q;n++)
    {
              if(i%n==0)
        break;
         if(n>q)
        xx[j++]=i;
                 z++;
    }   
    }
    return(z);
}
搜索更多相关主题的帖子: void include count 
2011-06-09 22:17
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:4 
程序代码:
int fun(int m, int xx[]) {
    int i, j = 0, n, q;
    if (m > 2) {                       // 把 2 拿出来单独处理,下面的循环就可以只检测奇数,可以明显提高效率
        xx[j++] = 2;
    }
    for (i = 3; i < m; i += 2) {
        q= (int) sqrt(i);              // sqrt() 的返回值是 double 型,需要显式类型转换。这里可以直接这样转换,舍掉小数部分没问题
        for (n = 3; n <= q; n++) {     // 这里还可以只检测数字 i 是否能被小于它的平方根的素数整除,进一步提高效率。写成下面那样:
        // for (n = 0; xx[n] < q; n++) {
            if (i%n==0) {
            // if (i % xx[n]) {
                break;
            }
        }
        if (n > q) {
        // if (xx[n] > q) {
            xx[j++]=i;
        }
    }
    return(j);    // 没必要再搞个 z,返回 j 就好
}


ps:希望楼主注意代码的格式,写得漂亮,别人读的也轻松。还有,关于素数的算法楼主可以去看看“筛法”,好像是这么叫吧,效率比较好

[ 本帖最后由 voidx 于 2011-6-10 00:22 编辑 ]
2011-06-09 22:31
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
路过.....

[ 本帖最后由 cosdos 于 2011-6-9 22:54 编辑 ]

—>〉Sun〈<—
2011-06-09 22:50
讀詠夅
Rank: 2
等 级:论坛游民
帖 子:56
专家分:80
注 册:2011-5-18
得分:0 
学习·~~素数搞到头晕~!!
2011-06-12 18:11
讀詠夅
Rank: 2
等 级:论坛游民
帖 子:56
专家分:80
注 册:2011-5-18
得分:0 
学习·~~素数搞到头晕~!!
2011-06-12 18:11
liuting8181
Rank: 2
等 级:论坛游民
帖 子:54
专家分:19
注 册:2011-4-21
得分:3 
最近刚掌握了个一个求素数的 新算法

//筛选求质数
#include<stdio.h>
#include<stdlib.h>

#define N 1000

int main(void)
{
   int i,j;
   int prime[N+1];

   for(i=2;i<=N;i++)
       prime[i]=1;
   for(i=2;i*i<=N;i++)
   {
       if(prime[i]==1)
       {
           for(j=2*i;j<=N;j++)
           {
               if(j%i==0)
               prime[j]=0;
           }
       }
   }
   for(i=2;i<N;i++)
   {
       if(prime[i]==1)
       {
           printf("%-4d",i);
           if(i%20==0)
               printf("\n");
       }
   }
   printf("\n");

    return 0;

}
这样能求 N 内所有素数,比传统算法 在精确度问题上更好点。。。
2011-06-12 21:46
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
得分:3 
#include<stdio.h>
#include<math.h>
int fun(int m,int xx[])
{
    int i,j=0,n,q;
    for(i=2;i<m;i++)
    {
    q=(int)sqrt(i);
    for(n=2;n<=q;n++)
    {
      if(i%n==0)
      break;
    }   
    if(n>q)
    xx[j++]=i;  
    }
    return j;
}
void main()
{
   
    int i,m,a[100],k;
    scanf("%d",&m);
    printf("\n");
    k=fun(m,a);
    for(i=0;i<k;i++)
    printf("%d\n",a[i]);
    printf("count : %d\n\n\n",k);
}
2011-06-12 23:53
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
得分:0 
回复 6楼 liuting8181
这个可以是筛选,但不是筛选法。。
2011-06-13 01:16
sexywolfcrak
Rank: 2
等 级:论坛游民
帖 子:25
专家分:26
注 册:2011-6-13
得分:0 
这个问题不是很复杂
2011-06-13 09:01
liuting8181
Rank: 2
等 级:论坛游民
帖 子:54
专家分:19
注 册:2011-4-21
得分:0 
回复 8楼 fragileeye
那筛选法基于的算法是什么?请指教下....
2011-06-13 22:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-342356-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.632140 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved