hdu 1528 Perfection(数论·因子和·C++·java)

2024-03-27 23:18

本文主要是介绍hdu 1528 Perfection(数论·因子和·C++·java),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:http://poj.org/problem?id=1528

Perfection
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 11909 Accepted: 5595

Description

From the article Number Theory in the 1994 Microsoft Encarta: ``If a, b, c are integers such that a = bc, a is called a multiple of b or of c, and b or c is called a divisor or factor of a. If c is not 1/-1, b is called a proper divisor of a. Even integers, which include 0, are multiples of 2, for example, -4, 0, 2, 10; an odd integer is an integer that is not even, for example, -5, 1, 3, 9. A perfect number is a positive integer that is equal to the sum of all its positive, proper divisors; for example, 6, which equals 1 + 2 + 3, and 28, which equals 1 + 2 + 4 + 7 + 14, are perfect numbers. A positive number that is not perfect is imperfect and is deficient or abundant according to whether the sum of its positive, proper divisors is smaller or larger than the number itself. Thus, 9, with proper divisors 1, 3, is deficient; 12, with proper divisors 1, 2, 3, 4, 6, is abundant."
Given a number, determine if it is perfect, abundant, or deficient.

Input

A list of N positive integers (none greater than 60,000), with 1 <= N < 100. A 0 will mark the end of the list.

Output

The first line of output should read PERFECTION OUTPUT. The next N lines of output should list for each input integer whether it is perfect, deficient, or abundant, as shown in the example below. Format counts: the echoed integers should be right justified within the first 5 spaces of the output line, followed by two blank spaces, followed by the description of the integer. The final line of output should read END OF OUTPUT.

Sample Input

15 28 6 56 60000 22 496 0

Sample Output

PERFECTION OUTPUT15  DEFICIENT28  PERFECT6  PERFECT56  ABUNDANT
60000  ABUNDANT22  DEFICIENT496  PERFECT
END OF OUTPUT
分析:
由于a!=-1 && a!=1所以b是除number本身外的所有因子。完美数就是所有因子的和对number进行素因子分解,分解情况:a1-q1 a2-q2 …… an-qn 那么所有的因子和应该等于:(1+a1+a1^2+……+a1^q1)(1+a2+a2^2+……+a2^q2)……(1+an+an^2+……+an^qn)  对于每一项:1+a+a^2+……+a^n等比数列求和,当:
n是奇数时,乘积等于(1+a^(n/2+1))(1+a+……+a^(n/2)). (奇转偶)
n是偶数时,乘积等于(1+a^(n/2+1))(1+a+……+a^(n/2-1))+a^(n/2).   (偶转奇)
用C++很快写完并成功1A,想到刚学java,于是试着用java仿照着写写看,好家伙,运行时间,内存消耗都增长了不少,而且还莫名的错了好几次。CE因为类名的问题,WA是因为没有及时在输入0时跳出,PE则是System.out.println("PERFECTION OUTPUT\n");   ||-_-

c++:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int fac[300],p[300],top;
void resolve(int x){top=0;memset(p,0,sizeof(p));for(int i=2;i*i<=x;i++){if(x%i==0){fac[top]=i;while(x%i==0){x/=i;p[top]++;}top++;}}if(x>1){fac[top]=x;p[top++]++;}
}
int power(int a,int n){int ans=1,temp=a;while(n){if(n&1) ans=ans*temp;temp=temp*temp;n>>=1;}return ans;
}
int cal(int a,int n){if(n==2) return (1+a+a*a);if(n==1) return (1+a);if(n&1) return (1+power(a,n/2+1))*cal(a,n/2);else return (1+power(a,(n/2+1)))*cal(a,(n/2-1))+power(a,(n/2));
}
int main()
{//freopen("cin.txt","r",stdin);int a;printf("PERFECTION OUTPUT\n");while(cin>>a&&a){resolve(a);int res=1;for(int i=0;i<top;i++){res=res*cal(fac[i],p[i]);}printf("%5d  ",a);res=res-a;if(res<a) puts("DEFICIENT");else if(res==a) puts("PERFECT");else puts("ABUNDANT");}printf("END OF OUTPUT\n");return 0;
}
java:
import java.util.*;
import java.lang.String;
public class Main {static int[] fac=new int [300],p=new int [300];static int top;static void resolve(int x){top=0;Arrays.fill(p,0); //Arrays belong to utilfor(int i=2;i*i<=x;i++){if(x%i==0){fac[top]=i;while(x%i==0){x/=i;p[top]++;}top++;}}if(x>1){fac[top]=x;p[top++]++;}}static int power(int a,int n){int ans=1,temp=a;while(n>0){if(n%2==1) ans=ans*temp;temp=temp*temp;n>>=1;}return ans;}static int cal(int a,int n){if(n==2) return (1+a+a*a);if(n==1) return (1+a);if(n%2==1) return (1+power(a,n/2+1))*cal(a,n/2);else return (1+power(a,(n/2+1)))*cal(a,(n/2-1))+power(a,(n/2));}public static void main(String[] args) {int a;Scanner sc=new Scanner(System.in);System.out.println("PERFECTION OUTPUT");while(sc.hasNextInt()){a=sc.nextInt();if(a==0) break;resolve(a);int res=1;for(int i=0;i<top;i++){res=res*cal(fac[i],p[i]);}String str;res=res-a;if(res<a) str="DEFICIENT";else if(res==a) str="PERFECT";else str="ABUNDANT";System.out.printf("%5d  %s\n",a,str);}System.out.printf("END OF OUTPUT\n");}}
/*class perfect is public, should be declared in a file named perfect.java
public class perfect {^
把perfect 改成Main即可。(public修饰的类名必须和文件名一样)
*/



这篇关于hdu 1528 Perfection(数论·因子和·C++·java)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/853721

相关文章

Spring Security常见问题及解决方案

《SpringSecurity常见问题及解决方案》SpringSecurity是Spring生态的安全框架,提供认证、授权及攻击防护,支持JWT、OAuth2集成,适用于保护Spring应用,需配置... 目录Spring Security 简介Spring Security 核心概念1. ​Securit

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避