UVa1363 Joseph's Problem

把整个序列进行拆分成[k,k/2),[k/2, k/3), [k/3,k/4)...k[k/a, k/b)的形式,对于k/i(整除)相同的项,k%i成等差数列。

 1 /*by SilverN*/
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 long long n,m,k;
 9 int main(){
10     while(scanf("%lld%lld",&n,&k)!=EOF){
11         int i,j;
12         long long ans=0;
13         for(i=1;i<=n;i=m+1){
14             m=k/i;
15             if(!m)m=n;
16             else m=min(k/m,n);
17             ans+=(k%i+k%m)*(m-i+1)/2;
18         }
19         printf("%lld
",ans);
20     }
21     return 0;
22 }
原文地址:https://www.cnblogs.com/SilverNebula/p/5916394.html