一个关于素数的神奇性质

一 写在前面

1.1 本文内容

一个关于素数的神奇性质。

二 素数性质

性质:所有大于等于5的素数一定和6的倍数相邻!此性质可以被证明,证明方法可以去搜索相关资料。下面给出1000以内的素数,你可以验证一下看是不是这样。

有了这个性质,下面再给出一个其在质因数分解中的实际应用例子。题目链接在此。题目大意是给定一个正整数N,要求将其分解成多个质因数相乘的形式。需要注意的是质因数分解的常用算法是试除法,例子中使用的也是试除法。并且每一个合数都能够写成几个质因数相乘的形式。

上述题目的一个可行代码如下:

 1 #include <stdio.h>
 2 #include <stdbool.h>
 3
 4 int main(int argc, char *argv[])
 5 {
 6     //freopen("in.txt", "r", stdin);
 7     int n, step;
 8     bool first = true;
 9
10     scanf("%d", &n);
11
12     /* 将数n中包含的2, 3, 5这三个质因数给除去 */
13     while (n % 2 == 0)
14     {
15         (first == true) ? printf("2") : printf("*2");
16         first = false;
17         n /= 2;
18     }
19     while (n % 3 == 0)
20     {
21         (first == true) ? printf("3") : printf("*3");
22         first = false;
23         n /= 3;
24     }
25     while (n % 5 == 0)
26     {
27         (first == true) ? printf("5") : printf("*5");
28         first = false;
29         n /= 5;
30     }
31
32     /* 让step从6开始,考察step相邻的两个数,如果能整除n,则将其除去 */
33     step = 6;
34     while (n >= (step-1))
35     {
36         if (n % (step-1) == 0)
37         {
38             (first == true) ? printf("%d", step-1) : printf("*%d", step-1);
39             first = false;
40             n /= (step-1);
41         }
42         else if (n % (step+1) == 0)
43         {
44             (first == true) ? printf("%d", step+1) : printf("*%d", step+1);
45             first = false;
46             n /= (step+1);
47         }
48         else
49         {
50             step += 6;
51         }
52     }
53
54     putchar(‘\n‘);
55     //fclose(stdin);
56     return 0;
57 }

有人可能有疑问,虽然大于等于5的素数一定和6的倍数相邻,但反过来,所有与6的倍数相邻的却不一定是素数。也就是说在代码中的最后一个while循环中,step-1和step+1两个数可能是合数,那这样岂不是将n中的合数因子给除去了吗?事实果真是这样吗?不是的,前面说过,任何一个合数一定可以分解成几个质因数相乘的形式,也就是说即使step-1和step+1两个数中存在合数,那么它也无法整除n,因为在遇到该合数之前,该合数所能分解成的所有质因数都已经在n中给去除了。换句话说,在遇到n的合数因子(step-1或step+1)之前,该合数因子就因为其自身能被分解成更小的质因数而在之前的质因数分解中被分解殆尽了。所以上述代码是没问题的。

原文地址:https://www.cnblogs.com/laizhenghong2012/p/8734412.html

时间: 2024-11-09 06:00:43

一个关于素数的神奇性质的相关文章

记录一个python里面很神奇的操作,对一个包含列表的元组进行增量赋值,成功赋值但还报错

记录一个python里面很神奇的操作 今天记录一个很神奇的操作.关于序列的增量赋值.如果你很熟悉增量赋值,你也不妨看下去,我想说的是有关于增量赋值和元组之间一种神奇的操作.来自 <流畅的Python> 一书,让我们更加深入地了解里面的原理 神奇的操作 >>>t = (1,2,[30,40]) >>>t[2] += [50,60] 上面这段代码会出现什么样的情况 a. t会变成(1,2,[30,40,50,60]) b. 因为tuple不支持对它的元素赋值,所

梦工场实验室 素数求和 神奇的素数筛选

问题 G: 素数求和 时间限制: 1 Sec  内存限制: 256 MB提交: 142  解决: 30[提交][状态][讨论版] 题目描述 输入一个自然数n,求小于等于n的素数之和 输入 输出 样例输入 2 样例输出 2 提示 测试样例保证 2 <= n <= 2,000,000 埃拉托斯特尼筛法(Sieve of Eratosthenes) #include<stdio.h> #include<string.h> #include<stdlib.h> #i

写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。

#include<stdio.h>int test(int x){ int i=1; for(i=1;i<x;i++){ if(x%i==0&&x>2) return 0; else return 1; } }int main(){ int test(int x); int b; printf("输入整数:\n"); scanf("%d",&b); if(test(b)==0) printf("非素数&quo

zoj 2526 反素数 附上个人对反素数性质的证明

反素数的定义:对于任何正整数,其约数个数记为,例如,如果某个正整数满足:对任意的正整 数,都有,那么称为反素数. 从反素数的定义中可以看出两个性质: (1)一个反素数的所有质因子必然是从2开始的连续若干个质数,因为反素数是保证约数个数为的这个数尽量小 (2)同样的道理,如果,那么必有 个人理解性证明: 对(1)假设不是从2开始,那么假设n的最小素因素是k,把k换成2,2的次数仍等于k的次数,得到N,可知,N<n,并且f(n)==f(N),与n是反素数矛盾 对(2)假设ti<tj   ti,tj

zoj 1562 反素数 附上个人对反素数性质的证明

反素数的定义:对于不论什么正整数,其约数个数记为.比如,假设某个正整数满足:对随意的正整 数.都有,那么称为反素数. 从反素数的定义中能够看出两个性质: (1)一个反素数的全部质因子必定是从2開始的连续若干个质数.由于反素数是保证约数个数为的这个数尽量小 (2)相同的道理,假设,那么必有 个人理解性证明: 对(1)如果不是从2開始,那么如果n的最小素因素是k,把k换成2,2的次数仍等于k的次数,得到N,可知,N<n,而且f(n)==f(N).与n是反素数矛盾 对(2)如果ti<tj   ti,

反素数深度分析

装载自:http://blog.csdn.net/ACdreamers/article/details/25049767 小知识点: 如果求约数的个数 756=2^2*3^3*7^1 (2+1)*(3+1)*(1+1)=24 基于上述结论,给出算法:按照质因数大小递增顺序搜索每一个质因子,枚举每一个质因子 为了剪枝: 性质一:一个反素数的质因子必然是从2开始连续的质数. 因为最多只需要10个素数构造:2,3,5,7,11,13,17,19,23,29 性质二:p=2^t1*3^t2*5^t3*7

【BZOJ 1053】 1053: [HAOI2007]反素数ant (反素数)

1053: [HAOI2007]反素数ant Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x ,则称x为反质数.例如,整数1,2,4,6等都是反质数.现在给定一个数N,你能求出不超过N的最大的反质数么 ? Input 一个数N(1<=N<=2,000,000,000). Output 不超过N的最大的反质数. Sample Input 1000 Sample Output

[POJ1284]Primitive Roots(原根性质的应用)

题目:http://poj.org/problem?id=1284 题意:就是求一个奇素数有多少个原根 分析: 使得方程a^x=1(mod m)成立的最小正整数x是φ(m),则称a是m的一个原根 然后有这样的定理: 1.所有奇素数都有原根 2.如果一个数n有原根,那么原根个数为φ(φ(n)) 由性质2就可知道,对于此题的奇素数n,结果就是φ(n-1)

zoj2562--More Divisors(反素数模板)

More Divisors Time Limit: 2 Seconds      Memory Limit: 65536 KB Everybody knows that we use decimal notation, i.e. the base of our notation is 10. Historians say that it is so because men have ten fingers. Maybe they are right. However, this is often