求正整数2和n之间的完全数

【题目描述】

求正整数22和nn之间的完全数(一行一个数)。

完全数:因子之和等于它本身的自然数,如6=1+2+36=1+2+3

【输入】

输入n(n≤5000)n(n≤5000)。

【输出】

一行一个数,按由小到大的顺序。

【输入样例】

7

【输出样例】

6
 1 #include<cstdio>
 2 #include<cmath>
 3 int n;
 4 bool perfect(int a){
 5     int sum=1;
 6     for(int i=2;i<=sqrt(a);i++){
 7         if(a%i==0) sum+=i+a/i;
 8     }
 9     if(a==sum) return true;
10     else return false;
11 }
12 int main(){
13     scanf("%d",&n);
14     for(int i=2;i<=n;i++){
15         if(perfect(i)) printf("%d\n",i);
16     }
17     return 0;
18 }

一道很水的函数题,

没啥可说的,

就是用一个函数判断是否为完全数;

是,就输出,

水完了qwq(溜了溜了)

原文地址:https://www.cnblogs.com/sxy2004/p/12246430.html

时间: 2024-08-12 06:06:25

求正整数2和n之间的完全数的相关文章

C语言:求出0~999之间的所有“水仙花数”并输出

#include <stdio.h> int main() {  int num,unit,ten,hundred;  int i=0;  printf("水仙花数:\n");  for(num=100;num<=999;num++)  {   hundred=num/100;   ten=(num-hundred*100)/10;   unit=num-hundred*100-ten*10;    if(num==hundred*hundred*hundred+te

(语法百题29)求出2-100之间的所有质数(素数)

知识点: 用到了指针 算法:除去1和本身,中间的所有数如果都不能被本身整除,这个数就是素数. 内容: 求出2-100之间的所有质数(素数) 输入说明: 无 输出说明: 一行一个素数 #include <stdio.h> int main() { int i,a[100],*p,j,m; p=a; for (i=2;i<=100;i++) { p=a; for (j=2;j<i;j++,p++) //每一个i,从2到i-1的每个数j被i除,余数存入数组 { *p=i%j; } p=a

BZOJ 1225: [HNOI2001] 求正整数( dfs + 高精度 )

15 < log250000 < 16, 所以不会选超过16个质数, 然后暴力去跑dfs, 高精度计算最后答案.. ------------------------------------------------------------------------------ #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace s

将正整数n划分成一系列正整数之和,求正整数的不同划分个数

//将正整数n划分成一系列正整数之和,求正整数的不同划分个数 //n表示划分的整数,m表示划分的整数最大值 function q(n,m){ if(n<1||m<1){ return 0; }else if(n===1||m===1){ return 1; }else if(n<m){ return q(n,n) }else if(n===m){ return q(n,m-1)+1 }else{ return q(n,m-1)+q(n-m,m) } } //例如:正整数6有11种划分 c

[HNOI2001]求正整数

题目描述 对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m. 例如:n=4,则m=6,因为6有4个不同整数因子1,2,3,6:而且是最小的有4个因子的整数. 输入输出格式 输入格式: n(1≤n≤50000) 输出格式: m 输入输出样例 输入样例#1: INT.IN 4 输出样例#1: INT.OUT 6题解: 这道题和[HAOI 2007]反素数ant解题思路和方法简直一毛一样... 同样我们引入这个公式: 对任一整数a>1,有a=p1a1p2a2-pnan,其中p1<p2

C语言 求出100~999之间的所有“水仙花数”并输出

"水仙花数"是指一个三位数,其各位数字的立方和确好等于该数本身,如:153=1+5+3?,则153是一个"水仙花数".在数论中,水仙花数(Narcissistic number)也称为自恋数.自幂数.阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数. 例如153.370.371及407就是三位数的水仙花数,其各个数之立方和等于该数: 153 = 1^3 + 5^3 + 3^3. 370 = 3^3 + 7^3 +

HDU1007(求最近两个点之间的距离)

一年前学长讲这题的时候,没听懂,自己搜解题报告也看不懂,放了一年.如今对分治和递归把握的比一年前更加熟悉,这题也就解决了. 题意:给你一堆点让你求最近两点之间距离的一半,如果用暴力的话O(n*n)明显会超时,那么我们就用分治思想,将所有点按照横坐标x排序,然后取中间的mid,分着求1-mid,mid-n,这样递归求解,递归只需要logn级别就可以完成递归,这有点类似二分思想. 1.我们取左边点对最小和右边点对最小比较,取最小的,记做d 2:但是最近点有可能一个点在左边,一个点在右边,所以要单独考

c语言:3种方法;求出0~999之间的所有“水仙花数”并输出。

方法一: #include <stdio.h> int main() { int i,j,k,n; printf("水仙花数:",n); for(n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%d\n ",n); } return 0; } 输出结果: 水仙花数:153 370 371 407 Press any key to c

求出0~999之间的所有“水仙花数”并输出

#include <stdio.h> int main() { int num,a,b,c;  for(num=100;num<=999;num++)    { a=num/100; b=(num-a*100)/10; c=(num-a*100-b*10); if(num==a*a*a+b*b*b+c*c*c) { printf("%d ",num); } }     return 0; }