社区讨论

指数+1的做法好像TLE

P1403[AHOI2005] 约数研究参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo853yqm
此快照首次捕获于
2023/10/27 12:55
2 年前
此快照最后确认于
2023/10/27 12:55
2 年前
查看原帖
rt.
CPP
//新方法:指数加1连乘方法
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
bool Isprime(int n) {
    for(int i = 2; i * i <= n; i++) if(n % i == 0) return true;
    return false;
}
int f(int n) {
    long long res = 1;
    if(n == 0 || n == 1) {
        return 1;
    }
    for(int i = 2; i <= n; i++) {
        if(Isprime(i)) continue;//如果它是合数,那就不行(为了节省时间复杂度)
        long long cnt = 0;
        while(n % i == 0) {
            cnt++;
            n /= i;
        }
        res *= (cnt + 1);
    }
    return res;
}
int main() {
	ll ans = 0;
	ll n; cin >> n;
	for(int i = 1; i <= n; i++) {
		ans += f(i);
//		cout << f(i) << ' ';
	}
//	cout << endl;
	cout << ans;
	return 0;
}
能不能帮助优化一下?

回复

3 条回复,欢迎继续交流。

正在加载回复...