博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Perfect Number[完数]
阅读量:253 次
发布时间:2019-03-01

本文共 1285 字,大约阅读时间需要 4 分钟。

它所有的真因子(即除了自身以外的)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。

#include
#include
#include
#define max 1e9using namespace std;//梅森素数//原理:如果(2^p-1)是素数,那么它就是梅森素数,再根据用(2^p-1) * 2^(p-1),这个就是完全数。bool Prime(int prime);int main() { clock_t start, end; start = clock(); for (int p = 2; ; ++p) { int perfect = (pow(2 , p) - 1) * pow(2 , p - 1); if (perfect > max) break; int prime = pow(2 , p) - 1; if (Prime(prime)) cout << perfect << endl; } //计算开始到找完后的时间 end = clock(); float time = (float)(end - start) / 1000; cout << "time is" << time << "s" << endl; return 0; } bool Prime(int prime) { bool choice = true;//假设为质数 int k = sqrt((float)prime); for (int j = 2; j <= k; ++j) { if (prime % j == 0) {//不是质数 choice = false; break; } } return choice;}

/*完全数

6

28

496

8128

33550336

------------------------------------------------------------------------------------------------------------------------------------

6

28

496

8128

33550336

time is0.006s

//判断素数/*1.如果数不是很大,且追求速度快,接近O(n)可用埃式筛法sieve,但需要开辟数组空间is_prime[maxx]来记录是否为素数。然后直接判断is_prime[index]2.普通判断方法:bool Prime(int prime) {	bool choice = true;//假设为质数	int k = sqrt((float)prime);	for (int j = 2; j <= k; ++j) {		if (prime % j == 0) {//不是质数			choice = false;			break;		}	}	return choice;}*/

 

转载地址:http://cnpt.baihongyu.com/

你可能感兴趣的文章