zoukankan      html  css  js  c++  java
  • P1403 [AHOI2005]约数研究

    这个题很有意思啊,

    #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;
    }
  • 相关阅读:
    校门外的树
    年龄与疾病
    数组逆序重放
    计算书费
    陶陶摘苹果
    与指定数字相同的数的个数
    上学路线
    NOIP2011 普及組 統計單詞數
    [HAOI2012]音量调节
    [USACO11JAN]利润Profits
  • 原文地址:https://www.cnblogs.com/jindui/p/11639294.html
Copyright © 2011-2022 走看看