蓝桥杯练习/大水题

蓝桥杯练习/大水题_第1张图片

一道看起来的确很水的题,然而直接被WA...      果然思路错了

第一次用的是 if(i%2!=0&&i%5!=0&&i%11!=0&&i%13!=0) 来利用flag不断累加。结果由于N范围到10^18。

在别人的代码中得到另一种方法:n-(二的倍数)-(五的倍数)-(十一的倍数)-(十三的倍数)+(2*5的倍数)+(2*11的倍数)

+(2*13的倍数)+(5*11的倍数)+(5*13的倍数)+(11*13的倍数)+(2*5*11的倍数)+(2*5*13的倍数)+(5*11*13的倍数)

+(2*5*11*13的倍数)。也就是昨天学的容斥定理。。。

代码如下:

蓝桥杯练习/大水题_第2张图片

总结:1.while(~scanf("%d",&n)){ }

scanf 的返还值为EOF;在stdio.h的头文件中值为-1;

2.容斥定理的应用。

你可能感兴趣的:(蓝桥杯)