10392 - Factoring Large Numbers

本文介绍了一种用于分解长整型大数为质因数的方法,通过筛选找到小于100万的素数,进而高效地进行大数分解。

Problem F: Factoring Large Numbers

One of the central ideas behind much cryptography is that factoring large numbers is computationally intensive. In this context one might use a 100 digit number that was a product of two 50 digit prime numbers. Even with the fastest projected computers this factorization will take hundreds of years.

You don't have those computers available, but if you are clever you can still factor fairly large numbers.

Input

The input will be a sequence of integer values, one per line, terminated by a negative number. The numbers will fit in gcc's long long int datatype. You may assume that there will be at most one factor more than 1000000.

Output

Each positive number from the input must be factored and all factors (other than 1) printed out. The factors must be printed in ascending order with 4 leading spaces preceding a left justified number, and followed by a single blank line.

Sample Input

90
1234567891
18991325453139
12745267386521023
-1

Sample Output

    2
    3
    3
    5

    1234567891

    3
    3
    13
    179
    271
    1381
    2423

    30971
    411522630413

把一个long long类型的大数分解质因数,保证最多只有一个大于1000000的质因数。那就直接用素数筛选法把1000000以内的素数找出来。水题

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define maxn 1000010
using namespace std;
int a[maxn]= {0};
int main ()
{
    long long n;
    int i,j;
    for (i=2; i<1000000; i++)
        if (!a[i])
            for (j=2*i; j<1000000; j+=i)
                a[j]=1;
    while(cin>>n)
    {
        if (n<0) break;
        for (i=2; i<1000000; i++)
            if (!a[i])
            {
                while(n%i==0)
                {
                    printf("    %d\n",i);
                    n/=i;
                }
            }
        if (n>1) printf("    %lld\n",n);
        cout<<endl;
    }
    return 0;
}


<think>好的,我现在要解决用户提到的Maven构建失败问题,特别是与maven-clean-plugin相关的错误,以及无法删除目标文件和Tomcat日志access_log的问题。用户的环境是Windows 10,使用Apache Maven 3.6.3和OpenJDK 17。我需要结合之前的引用和用户历史问题来思考解决方案。 首先,用户之前遇到的错误是NoPluginFoundForPrefixException,现在的问题不同,但同样涉及Maven插件的问题。可能的原因包括文件锁定、权限问题、插件版本兼容性或路径问题。根据引用[3],Maven版本与项目不兼容可能导致问题,但用户使用的是3.6.3,而之前提到可能需要降级到3.5.4。不过当前问题是否与版本有关需要验证。 接下来,用户提到无法删除target目录和Tomcat日志,特别是access_log文件。在Windows系统中,常见的问题是文件被其他进程锁定,例如Tomcat服务未完全关闭,导致文件无法删除。需要检查是否有残留的Java进程或Tomcat实例仍在运行。 另外,maven-clean-plugin的配置可能存在问题。如果插件配置不正确,可能无法正确清理目标目录。用户可能需要检查pom.xml中的clean插件配置,或者显式指定插件版本以确保兼容性。引用[2]提到Maven 3.6.3可能存在稳定性问题,但用户已经使用该版本,可能需要更换版本或调整配置。 考虑到用户使用OpenJDK 17,可能存在与Maven插件的兼容性问题。某些旧版插件可能不支持Java 17,需要更新插件版本。例如,maven-clean-plugin的较新版本可能修复了与高版本JDK的兼容性问题。 可能的解决方案步骤包括: 1. 确保所有Tomcat和Java进程已终止,释放文件锁定。 2. 检查文件权限,确保Maven有权限删除target目录和日志文件。 3. 更新或指定maven-clean-plugin的版本,确保兼容OpenJDK 17。 4. 调整Maven的配置,如使用增强型守护进程(参考引用[4]提到的性能优化,可能影响文件处理)。 5. 尝试降级Maven版本到3.5.4,如引用[3]的建议,解决兼容性问题。 6. 手动清理残留文件,然后重试构建。 需要验证这些步骤,并考虑用户的具体环境。例如,Windows的文件锁定机制较为严格,可能需要使用资源监视器查找锁定进程。同时,确保IDE(如IntelliJ)没有锁定文件,可能需要关闭IDE后通过命令行操作。</think>### Maven构建失败解决方案:`maven-clean-plugin` 无法删除目标文件与Tomcat日志 #### 一、根本原因分析 1. **文件锁定冲突** - **Tomcat进程未完全退出**:`access_log` 或 `target` 目录被Tomcat进程占用(常见于Windows系统)[^1] - **IDE/编辑器占用文件**:IntelliJ IDEA或其他IDE缓存导致文件句柄未释放 - **防病毒软件干扰**:Windows Defender或第三方杀毒软件临时锁定文件 2. **权限问题** - Maven进程无权限删除`target`目录或其子文件(尤其是系统级目录或受保护路径) 3. **插件兼容性问题** - `maven-clean-plugin` 版本与 OpenJDK 17 或 Maven 3.6.3 存在兼容性缺陷 - 旧版插件未适配Java 17的文件系统API变更(如NIO.2路径处理) --- #### 二、分步解决方案 ##### 步骤1:解除文件锁定 1. **强制终止Tomcat及Java进程** ```bash # Windows命令 taskkill /F /IM java.exe taskkill /F /IM tomcat*.exe ``` - 使用资源监视器(Resource Monitor)确认无残留进程锁定文件 2. **关闭IDE并手动清理** - 退出IntelliJ IDEA,直接删除以下目录: ```bash rd /s /q "项目路径\target" del /F /Q "项目路径\logs\access_log" ``` ##### 步骤2:配置Maven插件 1. **显式指定`maven-clean-plugin`版本** 在`pom.xml`中强制使用兼容Java 17的版本: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>3.3.2</version> <!-- 支持JDK 17的稳定版本 --> <configuration> <fileset> <directory>${project.build.directory}</directory> <followSymlinks>false</followSymlinks> </fileset> </configuration> </plugin> </plugins> </build> ``` - **关键参数**:`<followSymlinks>false</followSymlinks>` 避免符号链接问题[^2] 2. **禁用文件锁定缓存(Windows专属)** 在`settings.xml`中添加JVM参数: ```xml <profiles> <profile> <id>disable-file-locking</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <jvmOptions>-Djava.io.tmpdir=${user.home}/.m2/tmp</jvmOptions> </properties> </profile> </profiles> ``` ##### 步骤3:调整构建命令 1. **跳过clean阶段验证问题范围** ```bash mvn install -DskipClean=true ``` - 若构建成功,则确认问题仅存在于clean阶段 2. **启用Maven增强模式(参考引用[4])** 使用Maven Daemon(`mvnd`)减少JVM冷启动导致的文件句柄延迟释放: ```bash mvnd clean install # 需提前安装Maven Daemon ``` ##### 步骤4:环境级修复 1. **降级Maven版本(兼容性兜底)** 根据引用[3]建议,降级至Maven 3.5.4: ```bash # 下载地址:https://archive.apache.org/dist/maven/maven-3/3.5.4/ set PATH="D:\Maven\apache-maven-3.5.4\bin";%PATH% ``` 2. **配置JDK工具链(多版本JDK共存)** 在`pom.xml`中指定Java 17兼容性: ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-toolchains-plugin</artifactId> <version>3.0.0</version> <configuration> <toolchains> <jdk> <version>17</version> <vendor>openjdk</vendor> </jdk> </toolchains> </configuration> </plugin> ``` --- #### 三、验证与调试 1. **启用Maven调试日志** ```bash mvn clean install -X -Dmaven.clean.failOnError=false ``` - 关注日志中的文件删除错误细节: ```log [DEBUG] Failed to delete: C:\project\target\classes\demo.class [WARNING] Failed to delete: ... (Access is denied) ``` 2. **使用Process Explorer定位锁定进程** - 下载Sysinternals工具集:https://learn.microsoft.com/en-us/sysinternals/ - 搜索被锁定文件的句柄持有者(如`access_log`) --- #### 四、高级场景处理 1. **Windows Defender排除目录** - 将项目路径加入实时保护排除列表: ``` Windows安全中心 → 病毒和威胁防护 → 管理设置 → 排除项 → 添加文件夹 ``` 2. **自定义clean插件策略** 扩展clean插件配置以跳过特定文件: ```xml <configuration> <excludeDefaultDirectories>true</excludeDefaultDirectories> <filesets> <fileset> <directory>${project.build.directory}</directory> <excludes> <exclude>**/access_log</exclude> <!-- 手动处理日志文件 --> </excludes> </fileset> </filesets> </configuration> ``` --- ### 关联问题扩展 1. **如何避免Maven多模块项目的clean冲突?** - 使用`maven-clean-plugin`的`clean:clean`目标而非生命周期阶段 - 配置`<skip>true</skip>`在父模块中统一控制 2. **IntelliJ IDEA中Maven操作仍失败?** - 关闭"Delegate IDE build/run actions to Maven"选项(引用[1]配置) - 清除`.idea`目录并重新导入项目 3. **Linux/Mac环境是否也有类似问题?** - 文件锁定机制不同,可通过`lsof`命令排查 - 使用`chmod -R +w target`强制赋予写权限 --- 通过以上步骤可系统性解决Windows下Maven清理失败问题,若持续出现权限错误,建议将项目移至非系统盘(如`D:\workspace`)并确保用户账户拥有完全控制权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值