给定一个整数N和一个最初由4 * N个0组成的二进制字符串,任务是翻转字符,使得由1 s组成的字符串的任何两个索引对都不是互素数,索引对也可以彼此可以被整除
注意:考虑基于1的索引。
例子:
Input: N = 3, S = “000000000000”
Output: 000000010101
Explanation: In the modified string “000000010101”, the indices of 1s are {8, 10, 12}. In the above set of indices, there does not exist any pair of indices that are co-prime and divisible by each other.
Input: N = 2, S = “00000000”
Output: 00000101
方法:给定的问题可以基于以下观察结果来解决:如果将字符翻转到位置4 * N,4 * N – 2,4 * N – 4,…最多N个词,则不存在任何项彼此可整除且GCD为1的一对索引。
下面是上述方法的实现:
C++
#include
using namespace std;
// Function to modify a string such
// that there doesn't exist any pair
// of indices consisting of 1s, whose
// GCD is 1 and are divisible by each other
void findString(char S[], int N)
{
int strLen = 4 * N;
// Flips characters at indices
// 4N, 4N - 2, 4N - 4 .... upto N terms
for (int i = 1; i <= N; i++) {
S[strLen - 1] = '1';
strLen -= 2;
}
// Print the string
for (int i = 0; i < 4 * N; i++) {
cout << S[i];
}
}
// Driver code
int main()
{
int N = 2;
char S[4 * N];
// Initialize the string S
for (int i = 0; i < 4 * N; i++)
S[i] = '0';
// function call
findString(S, N);
return 0;
}
// This code is contributed by aditya7409.
Java
// Java program for the above approach
import java.io.*;
class GFG {
// Function to modify a string such
// that there doesn't exist any pair
// of indices consisting of 1s, whose
// GCD is 1 and are divisible by each other
public static void findString(char S[], int N)
{
int strLen = 4 * N;
// Flips characters at indices
// 4N, 4N - 2, 4N - 4 .... upto N terms
for (int i = 1; i <= N; i++) {
S[strLen - 1] = '1';
strLen -= 2;
}
// Print the string
System.out.println(S);
}
// Driver Code
public static void main(String[] args)
{
int N = 2;
char S[] = new char[4 * N];
// Initialize the string S
for (int i = 0; i < 4 * N; i++)
S[i] = '0';
findString(S, N);
}
}
Python3
# Python3 program for the above approach
# Function to modify a string such
# that there doesn't exist any pair
# of indices consisting of 1s, whose
# GCD is 1 and are divisible by each other
def findString(S, N) :
strLen = 4 * N
# Flips characters at indices
# 4N, 4N - 2, 4N - 4 .... upto N terms
for i in range(1, N + 1):
S[strLen - 1] = '1'
strLen -= 2
# Prthe string
for i in range(4 * N):
print(S[i], end = "")
# Driver code
N = 2
S = [0] * (4 * N)
# Initialize the string S
for i in range(4 * N):
S[i] = '0'
# function call
findString(S, N)
# This code is contributed by sanjoy_62.
C#
// C# program to implement
// the above approach
using System;
public class GFG
{
// Function to modify a string such
// that there doesn't exist any pair
// of indices consisting of 1s, whose
// GCD is 1 and are divisible by each other
public static void findString(char[] S, int N)
{
int strLen = 4 * N;
// Flips characters at indices
// 4N, 4N - 2, 4N - 4 .... upto N terms
for (int i = 1; i <= N; i++) {
S[strLen - 1] = '1';
strLen -= 2;
}
// Print the string
Console.WriteLine(S);
}
// Driver Code
public static void Main(String[] args)
{
int N = 2;
char[] S = new char[4 * N];
// Initialize the string S
for (int i = 0; i < 4 * N; i++)
S[i] = '0';
findString(S, N);
}
}
// This code is contributed by souravghosh0416.
输出:
00000101
时间复杂度: O(N)
辅助空间: O(1)