首页 > 代码库 > BZOJ-1968
BZOJ-1968
1968: [Ahoi2005]COMMON 约数研究
Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2308 Solved: 1768
[Submit][Status][Discuss]
Description
Input
只有一行一个整数 N(0 < N < 1000000)。
Output
只有一行输出,为整数M,即f(1)到f(N)的累加和。
Sample Input
3
Sample Output
5
HINT
Source
Day2
/* * Author: lyucheng * Created Time: 2017年05月14日 星期日 16时13分57秒 * File Name: /media/lyucheng/Work/ACM源代码/数学--数论/递推找规律打表/BZOJ-1968.cpp *//* 题意:定义了一种运算f(n)为n的因子个数,然后让你求1-n的f(n)的和 * * 思路:进行离线打表 * * 错误:考虑的太浅了,正常打标跑了2000ms+,应该反过来想,打欧拉函数线性筛欧拉函数,然后减去就行了 * * 还是错误:上面的想法不对,这样筛输出来的只是和n不互质的数,但并不是因子 * 换个思路不用于处理,n/i表示比n小的数中i的倍数有多少,这样O(n)就可以处理出来 * */#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <string>#include <vector>#include <stack>#include <queue>#include <set>#include <time.h>#define MAXN 1000005#define LL long longusing namespace std;int n;int main(int argc, char* argv[]){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout; while(scanf("%d",&n)!=EOF){ LL res=0; for(int i=1;i<=n;i++){ res+=n/i; } printf("%lld\n",res); } return 0;}
BZOJ-1968
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。