| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1757 人关注过本帖
标题:求1到40000的互质数个数
只看楼主 加入收藏
wb_cj
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-11-20
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
求1到40000的互质数个数
求1到40000的互质数个数!求指导。
搜索更多相关主题的帖子: 互质数 
2011-11-20 14:09
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:7 
筛选法
程序代码:
#include <stdio.h>

bool foot[40005] = {0};
int main()
{
    int i,j,k = 0;
    for(i = 2;i<=200;i++)
    {
        if(!foot[i])
        {
            for(j = 2*i;j<=40000;j+=i)
                foot[j] = 1;
        }
    }
    for(i = 2;i<=40000;i++)
        if(!foot[i])
        {
            k++;
            printf("%d\n",i);
        }
    printf("%d\n",k);
    return 0;
}
题目来源 :http://www.

                                         
===========深入<----------------->浅出============
2011-11-20 14:21
wb_cj
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-11-20
收藏
得分:0 
回复 2楼 laoyang103
亲,我问的是互质数,公因数只有1的两个数,叫做互质数。
2011-11-20 14:48
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:7 
请问此题时限是多少?
2011-11-21 10:03
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
收藏
得分:7 
程序代码:
 /* Note:Your choice is C IDE */
//欧几里得的辗转相除法   基本思路!
#include "stdio.h"
int main()
{
long int x,y,z;
     puts("pleas input two number.");
     scanf( "%d%d" ,&x , &y);
     z = x % y;
     while(z != 0)
     {
         //变换变量的值
         x=y;
         y=z;
         z=x % y;
   
     }
     if(y==1)printf("this two number is prime number!");
     else printf("this two number is not prime number!\nhave greatest common divisor is:%d",y);
     return 0;
}









/* Note:Your choice is C IDE */
//欧几里得的辗转相除法   具体解法!
#include "stdio.h"
int main()
{
long int x,X1,y,Y1,z;
  puts("prime number list:");
  for(X1=1;X1<=4000;X1++)          //4000的只有点大,要计算很一会了
  for(Y1=1;Y1<=4000;Y1++)
  { 
       x=X1;
       y=Y1;
     z = x % y;
     while(z != 0)
     {
         //变换变量的值
         x=y;
         y=z;
         z=x % y;
    
     }
     if(y==1)
     {printf("%4d %4d\t",X1,Y1);}
  }
     return 0;
}

能力 技巧
2011-11-21 14:20
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 5楼 非死亡!
我该怎么说你呢.首先人家的数据量是40000不是4000,所以用这个都能想出的方法肯定不行的,这个方法4000的数据量都要算很久,40000的计算量是4000的一百倍以上
2011-11-21 14:30
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
收藏
得分:0 
看错了 不过有解法就是好的 说不定过几年,计算机的速度比现在更快,那么这点计算就行了. 这是通法啊.又不是简单的算法就是好算法啊.

能力 技巧
2011-11-21 14:52
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 7楼 非死亡!
怎么说呢,我们为什么研究算法,就是因为计算机运算速度跟不上,我举个例子,就是求n!有多少位,一般第一反应就是先用高精度算出n!,然后统计有多少位,当n达到几十万几百万的时候计算量你可以自己试试,如果换个思路,从数学上考虑位数=lg(n!)+1=lg(1)+lg(2)+...lg(n)+1,很快就可以算出来,这就是算法的作用,说实话,大学学的那些语法什么东西给个完全不会c语言的最多两个星期就可以让他完全掌握,真正目的还是在于学习一些算法,这道题目这种最简单的算法对方既然提问就肯定不会没想到,还是想想别的方法吧
2011-11-21 15:51
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
这..想了我一整天了,怎么忘了欧拉公式......

分解质因数复杂度是sqrt(n),然后代入欧拉公式中,总得时间复杂度是n^(3/2),大概可以处理到n=20W左右的数据应该都可以1s内出解

[ 本帖最后由 czz5242199 于 2011-11-21 17:50 编辑 ]
2011-11-21 16:05
快速回复:求1到40000的互质数个数
数据加载中...
 
   



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

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