码迷,mamicode.com
首页 > 其他好文 > 详细

P1403 [AHOI2005]约数研究

时间:2019-10-09 09:37:56      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:out   names   color   sharp   clu   scan   cout   mes   ++   

这个题很有意思啊,

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int ans[1000003],n,maxn;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=sqrt(i);j++){
			if(i%j==0)	ans[i]+=2;
			if(j==i/j&&i%j==0)	ans[i]--;
		}
	}
	for(int i=1;i<=n;i++)
		maxn+=ans[i];
	printf("%d",maxn);
	return 0;
}

 暴力打了一个稍稍加了个技巧得了60.

正解的话,暴力还有一种搞法,把每个数当因子把它的倍数加一。

由这个也可以推出一个式子,每个数在1到n的贡献为n/i个。

 

第一种

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int ans[1000003],n,maxn;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j+=i){
            ans[j]++;
        }
    }
    for(int i=1;i<=n;i++)
        maxn+=ans[i];
    printf("%d",maxn);    
    return 0;
}

 

第二种

#include<iostream>
using namespace std;
int n,ans;
int main(void){
    cin>>n;
    for(int i=1;i<=n;i++)ans+=n/i;
    cout<<ans;
}

 

P1403 [AHOI2005]约数研究

标签:out   names   color   sharp   clu   scan   cout   mes   ++   

原文地址:https://www.cnblogs.com/jindui/p/11639294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!