本题较简单,因为跟着hdu进行的,所以也是慢慢开始直接读英文题了。
开始是直接按照hint来的
#include<stdio.h>
#include<string.h>
int a[100000] = {0};
void change(int *a, int i, int n){
int j;
for(j = 1; j <= n; j++)
if(j % (i+1) == 0){
if(a[j-1] == 0)
a[j-1] = 1;
else
a[j-1] = 0;
}
return ;
}
int main()
{
int n;
while(scanf("%d", &n) != EOF){
memset(a, 0, n);
int i;
for(i = 0; i < n; i++)
change(a, i, n);
printf("%d\n", a[n-1]);
}
return 0;
}
看着就会TLE,毕竟for下还叠个带for的函数。
果不其然...
然后就改啊,改发现好像没什么用,毕竟这两个指数型的叠加是无可救药的。
另谋他路吧..
由于不是母语,又是第一次读题,并不仔细,发现其实只要关注输入的数所在位即可。
初始为0,1次→1, 2次→0,3次→1, 显然了,奇数为1,偶数为0嘛。OK啦
#include<stdio.h>
int main()
{
int n;
while(scanf("%d", &n) != EOF){
int k = 0;
int i;
for(i = 1; i <= n; i++)
if(n % i == 0)
k++;
if(k % 2 == 0)
printf("0\n");
else
printf("1\n");
}
return 0;
}
如上,才是本题的正型。