NC54604. 无尽大军
描述
输入描述
输入一个整数。
输出描述
输出一个整数,表示你的军队规模达到n所需要消耗的最少法力值。
示例1
输入:
1
输出:
0
示例2
输入:
6
输出:
5
说明:
一开始你的军队只有一名士兵,消耗2点法力值使你的军队规模翻倍。于是现在你有了两名士兵,再消耗1点法力值使军队达到3人。此时再消耗2点法力值就能达到6人。一共消耗5点法力值。C(clang 3.9) 解法, 执行用时: 154ms, 内存消耗: 420K, 提交时间: 2019-12-01 19:42:54
#include <stdio.h> #include <math.h> int main(){ long long n,k; long long cnt=0; scanf("%lld",&n); for(long long i=2;i<=sqrt(n);i++){ if(n%i==0){ while(n%i==0){ cnt+=i; n/=i; } } } if(n!=1) cnt+=n; printf("%lld",cnt); return 0; }
C++14(g++5.4) 解法, 执行用时: 162ms, 内存消耗: 544K, 提交时间: 2019-12-01 19:25:44
#include<bits/stdc++.h> #define ll long long using namespace std; int main(void) { ll n,ans=0; scanf("%lld",&n); for(int i=2;i<=sqrt(n);i++) while(n%i==0)n/=i,ans+=i; if(n>1)ans+=n; printf("%lld\n",ans); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 175ms, 内存消耗: 392K, 提交时间: 2019-12-04 15:01:19
#include<iostream> using namespace std; int main() { long long n,i,cnt=0; cin >> n; for ( i = 2; i*i <= n; ++i) { while(n % i == 0) { cnt+=i; n /= i; } } if (n !=1)cnt += n; cout << cnt << endl; }
Python3 解法, 执行用时: 1466ms, 内存消耗: 4600K, 提交时间: 2022-08-20 05:55:55
from math import sqrt n = int(input()) sum = 0 for i in range(2,int(sqrt(n))+1): while n % i == 0: sum += i n //= i if n != 1: sum += n print(sum)