素数 欧拉函数
Ac-try
这个作者很懒,什么都没留下…
展开
-
UVa 10179 -- Irreducable Basic Fractions
题目大意:题目大意:给一个正整数n,求出在[1, n]区间内和n互质的正整数的个数。Euler's Totient(欧拉函数)的直接应用。欧拉函数:计算 1 到 n 的正整数当中,跟 n 互质(最大公因数是一)的数,总共有几个。1.先将n做质因数分解:n=p1^a1*p2^a2*...*pm^am;(p1,p2,...,pm为n的质因数);2.以质因数计算欧拉数公式为n*(1-1/p1)*(1原创 2015-01-04 10:38:27 · 395 阅读 · 0 评论 -
UVA 10392--Factoring Large Numbers
题目概述:整数分解问题思路分析:任何一个数n都可以写成n=p1^a1*p2^a2*...*pm^am(其中p1,p2,..,pm为n的素因子)方法一:把所有可能的因数拿来试除,注意一个合数n的最大素因子不会超过sqrt(n)(除了n本身外);#include#includevoid f(long long n){ for(long long i=2;i<=(int)sq原创 2015-01-04 08:32:26 · 281 阅读 · 0 评论 -
POJ 1365 -- Prime Land
题目大意:题目给出一个整数的质数分解展开形式,给出每一个质因数及对应的指数。例如样例2: 5 1 2 1 = 5^1*2^1 = 10 根据所给的质数分解展开形式求出原数n,并求出n-1的展开形式,也像样例给的形式,质因数逐渐减小的形式。思路分析:先进行筛素数,再用n逐一对质数试除,求得质因数,并在此过程中记录求得质因数的指数。代码:#include#include#原创 2015-01-06 09:17:38 · 346 阅读 · 0 评论 -
BNUOJ -- The Turanga Leela Problem
题目大意:求两个数同余的模的个数。思路分析:同余定义: 设m是正整数,若a和b是正整数,且m|(a-b),则称a和b模m同余。那么,由同余的定义可知,如果a和b的差能被m整除,则m就是a b 同余的模,进而也就是a b的因子。先进行素数筛选,在进行差对素数试除,得到差的因子,也可以直接对所有可能的因数进行试除。代码分别如下:筛素数:#include#include#原创 2015-01-06 10:09:54 · 364 阅读 · 0 评论 -
PKU 1338 -- Ugly Numbers
题目大意:如果一个整数的因子只有 2 3 5 这个数字就是丑陋的,其中1也是丑陋的数字,没有输入数据,直接输出第1500个数字。思路分析:1.设定一个范围,逐一求这个范围内的数是不是因子只有2 3 5,直到算出第1500个丑陋的数字,这样做是明显超时的。2.设定一个数组,用来存找出的丑陋的数字,要注意存到数组中的数字会是不应该有重复的,并且数组中的数一定是2 3 5的倍数,所以设定原创 2015-01-06 10:40:56 · 332 阅读 · 0 评论 -
UVA 10879--Code Refactoring
求一个数的四个不同的因数;#include#includeint main(){ int N; scanf("%d",&N); int cnt=0; for(int i=0;i<N;i++){ cnt++; int k; scanf("%d",&k); int flog=0; p原创 2015-01-04 08:08:49 · 315 阅读 · 0 评论 -
1.UVA 10179 -- Irreducable Basic Fractions 2. UVA 10299 -- Relatives
题目大意:题目大意:给一个正整数n,求出在[1, n]区间内和n互质的正整数的个数。Euler's Totient(欧拉函数)的直接应用。欧拉函数:计算 1 到 n 的正整数当中,跟 n 互质(最大公因数是一)的数,总共有几个。1.先将n做质因数分解:n=p1^a1*p2^a2*...*pm^am;(p1,p2,...,pm为n的质因数);2.以质因数计算欧拉数公式为n*(1-1/p1)*(1原创 2015-01-04 10:40:34 · 317 阅读 · 0 评论 -
UVA 11064 -- Number Theory
1.题目大意:For each number output the number of numbers m, 1 ≤ m ≤ n, where gcd(m,n) ≠ 1 and gcd(m,n) ≠ m.求一个数n,从1到n中既不是n的互质数又不是n的因子的数的个数。2.思路分析:(1)求从1到n的互质数的个数就是n的欧拉数,用欧拉方程求出即可;(2)求n的因子数:将n进行分解:n原创 2015-01-04 10:58:17 · 583 阅读 · 0 评论 -
POJ 1595 -- Prime Cuts
题目大意:一个素数表,其中1也算是素数,给出两个数n,c,n代表区间,即素数中从1到小于等于n的范围,如果这个范围是奇数,那么从这个区间中间输出c*2-1个数即可,如果是偶数,那么就输出c*2个数,如果对应的c*2-1,c*2超出了区间范围,那就之间把区间内的素数全部输出就可以了。注意空格,空行,用线性筛选法筛出素数,直接判断区间中素数的个数的奇偶,对应输出就行。代码:#include原创 2015-01-06 10:51:48 · 470 阅读 · 0 评论 -
Prime Factors
整数分解问题;(与题uva10392 Factoring Large Numbers类似 这里就不多说了)对每个可能的因子进行试除;#include#include#includeint f(int n){ if(n<0) printf("%d = -1 x ",n); else printf("%d = ",n); n=abs(n);原创 2015-01-04 08:42:47 · 341 阅读 · 0 评论 -
string和stringstream用法总结
一、stringstring 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能。要使用 string, 必須先加入这一行:#include 接下來要宣告一个字串变量,可以写成:string s;我们也可以在宣告的同时让它设成某个字串:string s="TCGS";而要取得其中某一個字元,和传统C转载 2015-01-06 09:26:34 · 332 阅读 · 0 评论 -
改进的筛素数法
原文地址:http://blog.csdn.net/morewindows/article/details/7347459 最简单的筛素数法方法就是从2开始,将所以2的倍数去掉,然后从3开始,将3的倍数去掉。根据这样很容易写出代码,下面代码就是是筛素数法得到100以内的素数并保存到primes[]数组中。[cpp] view plaincopy转载 2015-01-04 08:36:19 · 251 阅读 · 0 评论 -
UVa 10110 -- Light, more light
题目大意:有一串灯,有打开和关闭两种状态,开始状态为关闭,一个人第i次走过这些灯,只有这些灯编号能整除i的灯的状态可以被改变(走一次代表一个来回,回来的途中不改变灯的状态)思路分析:给出n(第i趟),也就是求n的因子数,当n的因子数为奇数时灯的状态是被打开的,否则因子数为偶数,一次关,一次开,状态不改变。正常求出n的因子数在判断因子数的奇偶性,会超时,有一种很简单的算法,就是只有平方数的因原创 2015-01-06 09:51:41 · 329 阅读 · 0 评论