Codeforces Round 919(Div.2)

该文章描述了一个Java程序,用于解决给定数组中元素按照特定位置满足同余条件的问题,通过计算最大公约数来确定是否存在符合条件的数。程序首先分解质因数并找出可能的除数,然后检查这些除数是否导致所有位置的差值的绝对值的公约数不为1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C

不同组相应位置对于某个数p同余,求p

则找出相应位置中任取一个数,做减法加绝对值,此时余数被抵消,剩下为p的倍数。则对剩下的数取gcd,即得p。为方便这里取第一组中的数。然后判断按相应位置划分后,所的p求一个总的gcd,若不为1,则说明存在一个p使所有相应位置数满足同余。

若只有一个数,即分为一组,没有相应位置数,则直接输出1

若有两个数,则gcd为减后所得的数自身

import java.util.Arrays;
import java.util.Scanner;

class Tx1{
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int T=input.nextInt();
		while(true) {
			if(T==0) break;
			int n=input.nextInt();
			int[] a=new int[n+1];
			for(int i=1;i<=n;++i)a[i]=input.nextInt();
			int[] qi=new int[n+1];
			int t=0;
			for(int i=2;i<=Math.sqrt(n);++i) {
				if(n%i==0) {
					int x=n/i;
					if(x==i) {
						t++;qi[t]=i;
					}else {
						t++;
						qi[t]=i;
						t++;
						qi[t]=x;
					}
				}
			}
			int ans=1;
			if(n==1) {
				System.out.println(ans);
				T--;
				continue;
			}
			qi[0]=1;
			for(int i=0;i<=t;++i) {
				int k=qi[i];
				int g=Math.abs(a[1]-a[1+k]);
				
				for(int j=1;j<=k;++j) {
					for(int o=j+k;o<=n;o+=k) {
						int x=Math.abs(a[o]-a[j]);
						if(x!=0)g=gcd(g, x);
					}
					
				}
				if(g!=1)ans++;
				
			}
			System.out.println(ans);
			T--;
		}
	}
	public static int gcd(int a,int b) {
		int res;
		while(b!=0) {
			res=a%b;
			a=b;
			b=res;
		}
		return a;
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值