一道看起来的确很水的题,然而直接被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的倍数)。也就是昨天学的容斥定理。。。
代码如下:
总结:1.while(~scanf("%d",&n)){ }
scanf 的返还值为EOF;在stdio.h的头文件中值为-1;
2.容斥定理的应用。