为什么不会超时呢?n是10^18,你外层循环都超时了
#include <math.h>
#include <stdio.h>
int main() {
long long n,y,num,i=0;
scanf("%lld", &n);
num = sqrt(n - 2);
for (y = 1; y <= num; y++)
if ((n - y) % 2 == 0)
i++;
printf("%lld\n", i);
return 0;
}
希望对题主有所帮助!可以的话,帮忙点个采纳!
pow(y, 2) 修改成 y*y 这样会减少 调用pow函数带来的额外耗时
这样呢
#include<stdio.h>
int main() {
int n, i, x, y,a,b;
i = 0;
scanf("%d", &n);
for (x = 1; 2*x <= n; x++) {
for (y = 1; y*y <= n; y++) {
if (2*x + y*y == n) i++;
}
}
printf("%d\n", i);
return 0;
}
试试单层循环呢(循环y,算(n-y2)/2是不是整数)
这个试试
#include<stdio.h>
int main() {
long long n, i, x, y,a,b;
i = 0;
scanf("%lld", &n);
long long t1=n*2,t2=n*n;
for (x = 1; x <= t1; x++) {
for (y = 1; y <= t2; y++) {
if (2*x + y*y == n) i++;
}
}
printf("%lld\n", i);
return 0;
}