wannfly练习赛8 给个n,求1到n的所有数的约数个数的和

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给个n,求1到n的所有数的约数个数的和~

输入描述:

第一行一个正整数n

输出描述:

输出一个整数,表示答案
示例1

输入

3

输出

5

说明

样例解释:
1有1个约数1
2有2个约数1,2
3有2个约数1,3

备注:

n <= 100000000
先想如何求约数和, 我们可以枚举约数,有多少数是他的约数。 n / i, 可以发现,枚举到n/2时,往后的所有数的倍数只有他自己,n/i = 1(i>n/2
然后复杂度到了1e9一定是超时的。
我们观察约数和为 n /1 + n / 2 + n / 3 + ..... + n / n是一个 y = n / x (n >=x >= 1)函数上的离散值。。我们只要求出这个函数 1 - n范围内的离散值和就可以了。

然后发现该函数是关于 y = x 对称的 对称点在 x ^ 2 = n处。然后和就相当于求面积了。。画个函数图就都出来了
#include<stdio.h>
#include<math.h>
int main() {
    int t;
    scanf("%d",&t);
    int n;
    while(t--) {
        int i;
        int t;
        long long sum=0;
        scanf("%d",&n);
        t=(int)sqrt((double)n);
        for(i=1;i<=t;i++)
            sum+=(n/i);
        sum*=2;
        sum=sum-t*t;
        printf("%lld\n",sum);
    }
    return 0;
}


约数个数 题目描述 给个n,1到n的所有约数个数~ 输入描述: 第一行一个正整n 输出描述: 输出一个整,表示答案 示例1 输入 3 输出 5 说明 样例解释: 11约数1 2有2个约数1,2 3有2个约数1,3 备注: n <= 100000000 分析: 参考素筛法,考虑n,在[1,n]中,有n/2个2的倍字,同理n/3为3的倍... 阅读详情

相关推荐

给个n,1到n的所有约数个数~

题目描述 给个n,1到n的所有约数个数~ 输入描述: 第一行一个正整n 输出描述: 输出一个整,表示答案 示例1 输入 3 输出 5 说明 样例解释: 11约数1 2有2个约数1,2 3有2个约数1,3 备注: n 思路:从1-n枚举约数#include #incl

Kyrie_10的博客 2939

程序基本算法习题解析 对于给定的正整n,计算n共有多少种不同的分解式

题目: 大于1的正整n可以分解为n=X1*X2*...*Xm。例如,当n=12时,共有8中不同的分解式:12=12;12=6*2;12=4*3;12=3*4;12=3*2*2;12=2*6;12=2*3*2;12=2*2*3。对于给定的正整n,计算n共有多少种不同的分解式。 思路: 对每个因子递归搜索。以12为例,画个示意图: 然后 1+4+3 = 8,即为分解式个数。 程序如下...

elma_tww的博客 7436

给一个正整n,1到n能构造多少种不同形状的二叉查找树(BST)

int UniqueBSTNumber(int n) { vector f(n+1, 0); //f[i]表示1到i能形成的不同形状的BST个数 f[0] = 1; //空树 f[1] = 1; for (int i = 2; i <= n; i++) { for (int j = 1; j <= i; j++) //遍历1到i,

花开无言 892

牛客练习赛8

A 约数个数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 给个n,1到n的所有约数个数~ 输入描述: 第一行一个正整n 输出描述: 输出一个整,表示答案 示例1 输入 3

布呗之路 420

Wanafly 练习赛8 题解

题目链接:https://www.nowcoder.com/acm/contest/39#question A:给个n,1到n的所有约数个数~ 解法:枚举每个可能的约数,然后答案就是对n/i。。这个直接枚举会T,然后发现这个可以分块。。 #include using namespace std; typedef long long LL; LL n; //sinma(n

I good vegetable a! 455

Wannfly挑战赛23 B、hdu1850 - 博弈论(1步必胜的策略

链接:https://www.nowcoder.com/acm/contest/161/B 题目描述 小N小O在玩游戏。他们面前放了n堆石子,第i堆石子一开始有ci颗石头。他们轮流从某堆石子中取石子,不能不取。最后无法操作的人就输了这个游戏。但他们觉得这样玩太无聊了,更新了一下规则。具体是这样的:对于一堆有恰好m颗石子的石头堆,假如一个人要从这堆石子中取石子,设他要取石子为d,那么d必须是...

m0_37579232的博客 274

给定一个十进制正整n,写下从1到n的所有整,然后一下其中出现的字“1”的个数。 例如当n=2时,写下1,2。这样只出现了1个“1”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,

//请在此输入你的代码,复杂程序可先在DevC++中运行调试后再提交 #include<stdio.h> intmain() { intn,i,j,k,w=0,x; scanf("%d",&n); for(i=1;i<=n;i++) { k=i; for(j=0;k>0;j++) { x=k%10; k=k/

ck_zdn的博客 3448

约数个数(C语言)

题目描述 给个n,1到n的所有约数个数~ 输入描述: 第一行一个正整n 输出描述: 输出一个整,表示答案 输入 复制 3 输出 复制 5 说明 样例解释: 11约数1 2有2个约数1,2 3有2个约数1,3 备注: n <= 100000000 正常想法是用一个双重循环对每个数约数查找,发现是约数则加1,但是这样简单的想法当然是The Time Limited,所以要请出我们的论了,学还是非常重要的。 初次接触..

llvyeriji的博客 3599

1---n之间的所有约数

接上一篇 给你一个区间[t1,t2],出从t1到t2之间所有约数个数 上一篇说道 ,前n个数约数1个数为n/1约数2的个数为n/2,约数3的个数为n/3,以此类推……,换句话说就是,现在已知 1斤重的苹果的个数为n/1个,2斤重的个数为n/2,3斤重的个数为n/3,…,n斤重的个数为n/n,这堆苹果多少斤。小学题目。嘻嘻嘻(注意啊,这儿的除法是取整的,5/2 = 2。是c++...

雾隐雾现的至渝博客 1万+

牛客练习赛8,给个n,1到n的所有约数个数~

A 约数个数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 给个n,1到n的所有约数个数~ 输入描述: 第一行一个正整n 输出描述: 输出一个整,表示答案 示例1 输入 3

布呗之路 1912

1到n的所有正整中,有多少个数约数个数是奇

Description hry在学小学学的时候就在琢磨一个问题。。1到n的所有正整中,有多少个数约数个数是奇? Input 第一行有一个正整T,表示有T组测试据。 每组测试据一行一个正整n. (1&lt;=T&lt;=10000,1&lt;=n&lt;=1000000000000000000) Output 每组据输出一行一个整,表示1-n...

ax478的博客 2743

1-n每个数约数,约数,约数

时间复杂度 o(n * lnn)积分 n越大系越大 n = 1e7 循环次 1e9 n = 1e6 循环次 1e7 n = 1e5 循环次 1e6 //包括这个数本身 for( int i = 1; i <= n; ++i ) for( int j = i ; j <= n; j += i) ++f[j]; //不包括这个数本身 for( int i = 1; i <= n; ++i ) for

RunningBeef的博客 887

leetcode题目

目录 1.两之和 2.三之和(超时了311/313) 3.无重复字符的最长子串 4.寻找两个有序组的中位 5.整反转 6.回文 7.有效括号 8.两个数组的交集 9.实现strStr() 1...

weixin_30617737的博客 4600

洛谷 P1403 [1,n]所有约数个数之和

https://www.luogu.org/problemnew/show/P1403 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能。由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用“Samuel II”进行学研究。 小联最近在研究约数有关的问题,他统计每个正N的约数个数,并以f(N)来表...

xiji333的博客 2085

LightOJ - 1098 (1到n的约数)

题意:1到n除了本身1约数。题解:很容易想到O(n)的解法,对于每个数出现的次为n/i,减去本身,那么(n/i-1)*i,循环一遍即可。那么如何优化呢。我们可以先出前sqrt(n)的出现的次,sqrt(n)之后的出现的次如何呢,举个栗子。n=100,当我们到7时,7一共出现了100/7次,减去本身出现的一次,ans+=(100/7-1)*7。而100/7&gt;sqrt(...

阿狸的博客 939

1到n里面约数最多的约数个数

题目:1到n里面约数最多的约数个数 分析:首先明白一个数约数法。 根据约数定理:对于一个大于1正整n可以分解质因:n=p1^a1*p2^a2*p3^a3*…*pk^ak,则由约数个数定理可知n的正约数有(a₁+1)(a₂+1)(a₃+1)…(ak+1)个, 暴力算出每一个数约数个数,超时! 根据唯一分解定理,我们知道每一个数都可以用质因子的积表示,而约数个数只与指

wust_cyl的博客 5750
上一篇: HUD 1300 Pearls (水 dp)
下一篇: wannafly 练习8 D加边的无向图
zzcblogs
博客等级 码龄10年 32粉丝 201原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值