1. 程式人生 > >牛客練習賽25

牛客練習賽25

algorithm nbsp 輸入 mes tdi lld ring long long copy

鏈接:https://www.nowcoder.com/acm/contest/158/A
來源:牛客網

q次詢問,每次給一個x,問1到x的因數個數的和。

輸入描述:

第一行一個正整數q ;
接下來q行,每行一個正整數 x

輸出描述:

共q行,每行一個正整數表示答案

示例1

輸入

復制
4
1
2
3
10

輸出

復制
1
3
5
27

說明

1的因數有1

2的因數有1,2

3的因數有1,3

以此類推

備註:

1<=q<=10 ,1<= x<=10^9


 1 #include <iostream>
 2 #include <cstdio>
 3
#include <algorithm> 4 #include <cstdlib> 5 #include <cstring> 6 #include <string> 7 #include <deque> 8 #include <vector> 9 #include <set> 10 #include <map> 11 #include <cmath> 12 using namespace std; 13 #define ll long long 14 int t,n; 15
ll solve(int n)//1~n中所有因子的個數和 16 { 17 ll ans=0; 18 for(int i=1,last;i<=n;i=last+1){//sqrt(N)的復雜度 19 last=n/(n/i);//分塊 : 5/3 5/4 5/5 3 4 5 都出現了一次 20 ans+=(ll)(n/i)*(last-i+1);//n/i :i作為因子共出現的次數 21 } 22 return ans; 23 } 24 int main() 25 { 26 scanf("%d",&t); 27 while(t--)
28 { 29 scanf("%d",&n); 30 printf("%lld\n",solve(n)); 31 } 32 return 0; 33 }

牛客練習賽25