关于素数的问题解题报告

对于判断一个数是否是素数,我们的基本思想就是从2。。。。。到这个数之前一个数判断是否整除它的数存在,若存在则表明不是素数,代码如下:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i,n;
 5     while(scanf("%d",&n)==1)
 6     {    for(i=2;i<n;i++)
 7              if(n%i==0)    break;
 8         if(i==n)    printf("YES\n");
 9         else           printf("NO\n");
10     }
11         return  0;
12 }

但是我们注意到时间复杂度O(n);

我们要观察到其实只要到n的开二次方就行了于是我们优化一下代码:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     int i,n;
 6     while(scanf("%d",&n)==1)
 7     {    for(i=2;i<=sqrt(n);i++)
 8              if(n%i==0)    break;
 9         if(i>sqrt(n))    printf("YES\n");
10         else           printf("NO\n");
11     }
12         return 0;
13 }
14     

接下来如果是求根给出一个数,求1到这个数的之间所有的素数(⊙o⊙)?

或许基本思路就是用分治思想把它变成一个数是否是素数的问题;

这段代码就不贴出了。

下面介绍今天的主题筛选法:

筛选法的基本思想就是:素数的倍数一定不是素数;

实现方法就是:用一个长度为N+1的数组保存信息(0表示素数,1表示非素数),先假设所有的数都是素数(初始化为0),从第一个素数2开始,把2的倍数都标记为非素数(置为1),一直到大于N;然后进行下一趟,找到2后面的下一个素数3,进行同样的处理,直到最后,数组中依然为0的数即为素数。
说明:整数1特殊处理即可。

下面就贴出代码:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int a[100001];
 4 int main()
 5 {      int i,j,n;
 6
 7     while(scanf("%d",&n)==1)
 8     {    for(i=2;i<=n;i++)
 9         {if(a[i]==0)
10         for(j=i+i;j<=n;j+=i)
11             a[j]=1; }
12         printf("2");
13         for(i=3;i<=n;i++)
14             if(a[i]==0)    printf(" %d",i);
15         printf("\n");
16          }
17     return 0;
18  }

预处理筛选法的其它应用还可见:

HDu 1215:

1215 七夕节
题目大意:求一个数的真因子之和
Sample Input:
2
10
20
Sample Output:
8
22
题目分析:

本题特点同前例题:数据量很大(可达50万),每个数据也不小,同样可达50万。
常见方法:预处理筛法
思考:这个筛法和求素数的筛法细节区别在哪里?
再思考:如果是求一个数的因子的数量,哪里需要变化?
至于代码就自己敲出来<( ̄3 ̄)> 表!

时间: 2024-10-23 19:21:36

关于素数的问题解题报告的相关文章

[Miller-Rabin][CODEVS1702]素数判定2 解题报告

题面描述:判定一个数P∈[1,2^63-1]∩N是素数么. 按照朴素的判定素数方法,至少也需要O(P^0.5)的,但这道题就是霸气到连这样的时间复杂度都过不了的地步. 实在是不会做了,就学习了传说中的Miller-Rabin素数判定法. 两个引理: ①费马小定理: 设p为质数,且不满足p|a, 则a^(p-1)=a(mod p). 证: 又一个引理,若n与p互质,且a与p互质,则n*a与p互质. 这真的是一个看似很简单的引理,但它却意味着一些看似不那么简单的事情. 设A=(0,p)∩N,则 ①对

洛谷OJ P1045 麦森数 解题报告

洛谷OJ P1045 麦森数 解题报告 by MedalPluS   题目描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有909526位.麦森数有许多重要应用,它与完全数密切相关. 任务:从文件中输入P(1000<P<3100000),计算2P-1的位数和最后500位数字(用十进制高精度数表示)   输入描述   文件中只包含一个整数P(1000&l

USACO Section1.5 Prime Palindromes 解题报告

pprime解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 求a到b之间的所有回文素数(即又是素数又是回文数的数).[数据范围] 5<=a,b<=100,000,000[输入样例] 5

USACO Section1.5 Superprime Rib 解题报告

sprime解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 列出所有N位的超级素数. 所谓超级素数,即指其任意位前缀均为素数.例如7.73.733.7331均为素数,故而7331为超级素数

pat解题报告【1078】

1078. Hashing (25) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The task of this problem is simple: insert a sequence of distinct positive integers into a hash table, and output the positions of the input numbers.  The hash fun

解题报告 之 HOJ2276 SOJ2498 Count prime

解题报告 之 HOJ2276 SOJ2498 Count prime Description Given an integer interval [L, R](L <= R <= 2147483647, R - L <= 1000000), please calculate the number of prime(s) in the interval. Input There is one line in the input, which contains two integer: L,

解题报告 之 SOJ2666 分解 n!

解题报告 之 SOJ2666 分解 n! Description 给你一个数 n (1 < n <= 1000000) ,求 n! (n的阶乘)的质因数分解形式,质因数分解形式为 n=p1^m1*p2^m2*p3^m3-- * 这里 p1 < p2 < p3 < -- 为质数 * 如果 mi = 1, 则 ^ mi 就不需要输出 Input 输入是多case的,每行一个数n,1 < n <= 1000000,当n等于0时输入结束 Output 每个n输出一行,为它

解题报告 之 CodeForces150A Win or Freeze

解题报告 之 CodeForces150A Win or Freeze Description You can't possibly imagine how cold our friends are this winter in Nvodsk! Two of them play the following game to warm up: initially a piece of paper has an integer q. During a move a player should writ

NOIP2009解题报告

09年的题总体来说 没有难题,但是每道题除了第一题都要认真的慢慢写才能AC, 第一题: R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军用密码的编码规则:1. S国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所的内容均由大写字母‘A’—‘Z’构成(无空格等其他字母).2. S国对于每个字母规定了对应的“密字”.加密的过程就是将原信息中的所有字母替换为其对应的“密字”.3. 每个字母只对应一个唯一的“密字