1 条题解

  • 0
    @ 2025-10-6 20:16:37
    #include<stdio.h>
    int main()
    {
    	int n,m;
    	scanf("%d",&n);
    	int arr[n+9]={0};
    	arr[1]=1;
    	int l=1;
    	for(int i=2;i<=2*n;i++)
    	{  
    		l+=i;
    		arr[l%n]=1;
    		l%=n;
    	}
        //模拟做题,1 2 3 4····;是等差数列和为((x+1)*x)/2;可以发现当x多于n时这个n其实没有作用
    因为n步是绕一圈没有影响所以找到n的倍数步就行而我们发现当x=2*n时,和为n(2*n+1)正好是整数圈所以情况已经全部包含了,
    所有遍历到2*n步就可以结束了。
            m=0;
    	for(int i=0;i<n;i++)
    	{
    		if(arr[i]==0){
    			m=1;
    			break;
    		}
    		
    	}
    	if(m==0)
    	{
    		printf("YES");
    	}
    	else {
    		printf("NO");
    	}
    	
    	
    	
    	
    	
    	
    	return 0;}
    
    • 1

    信息

    ID
    289
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    533
    已通过
    72
    上传者