建設(shè)網(wǎng)站找哪個公司怎么開通網(wǎng)站
思路一:基本思路
1.x,y均不大于n,就是小于等于n。
2.x%y大于等于k。
3.一般的思路使用雙for循環(huán)去遍歷每一對數(shù)。
代碼實現(xiàn):
#include <stdio.h>
int main()
{int n = 0;int k = 0;//輸入scanf("%d%d", &n, &k);int x = 0;int y = 0;long long count = 0;for(x=1;x<=n;x++){for(y=1;y<=n;y++){if(x%y>=k)count++;}}printf("%lld", count);return 0;
}
我們的運行結(jié)果是
我們在vs2022下測試代碼的結(jié)果是正確的什么說明我們的代碼思路是沒有問題可以計算出結(jié)果但是呢,題目要求時間限制是1s,在vs運行出結(jié)果至少用了十秒。說明我們的時間復(fù)雜度過高當n比較大時時間復(fù)雜度是特別高的。
思路二:尋找規(guī)律推導(dǎo)公式
#include <stdio.h>
int main()
{long n = 0;long k = 0;//輸入scanf("%ld%ld", &n, &k);long count = 0;//1.當k=0的時候。if(k==0){count=n*n;}else {//只遍歷我們行for(long y=k+1;y<=n;y++){//計算對角線右long help = n % y < k ? 0 : (n % y) - k + 1;//計算對角線左count += (y - k) * (n / y) + help;}}printf("%ld\n",count);return 0;
}