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