void main()
{
int n,i,j,flag=0,out;
clrscr();
printf("enter the num\n");
scanf("%d",&n);
for(i=n+1;i<=100;i++)
{
flag=0;
for(j=2;j<i;j++)
{
if(i%j==0)
{
flag=1;
break;
}
}
if(flag==0)
{
printf("next prime is:%d",i);
break;
}
}
getch();
}
在此代码中,如果我输入为8。然后i = 9,j = 2 然后9%2 == 0条件变为假,9将作为下一个素数打印,这是错误的答案。请给我正确的解决方案。
答案 0 :(得分:2)
我检查了你的程序,它产生了正确的输出。
现在解释一下,对于你描述的情况
在此代码中,如果我输入为8。然后i = 9,j = 2然后9%2 == 0 条件变为假,9将作为下一个素数打印 这是错误的答案。
所以,它会得到(9%2 == 0)=&gt;假。然后它不会检查CREATE FUNCTION [dbo].[HashPassword]
(
@Password VARCHAR(50),
@PasswordSalt UNIQUEIDENTIFIER
)
RETURNS UNIQUEIDENTIFIER
AS
BEGIN
DECLARE @HashPassword UNIQUEIDENTIFIER
SELECT @HashPassword = HASHBYTES('SHA1', CAST(@Password as varbinary) + CAST(@PasswordSalt as varbinary))
RETURN(@HashPassword)
END
条件并将9打印为下一个素数。相反,它会增加j并继续循环直到string passwordShortened = HexStringShortened(password);
string saltShortened = HexStringShortened(salt);
var concated = passwordShortened.FromHexEncoded().Concat(saltShortened.FromHexEncoded()).ToArray();
SHA1 hasher = SHA1.Create();
byte[] hashBytes = hasher.ComputeHash(concated);
string convertedFinal = ByteArrayToString(hashBytes);
private static string HexStringShortened(string cleartext)
{
byte[] ba = Encoding.Default.GetBytes(cleartext);
var hexString = BitConverter.ToString(ba);
hexString = hexString.Replace("-", "");
if (hexString.Length > 59)
{
hexString = hexString.Substring(0, 60);
}
return hexString;
}
public static string ByteArrayToString(byte[] ba)
{
string hex = BitConverter.ToString(ba);
return hex.Replace("-", "");
}
。
因此,它会产生正确答案。
答案 1 :(得分:0)
检查以下代码:
void main()
{
int n,i,j;
clrscr();
printf("Enter the number : ");
scanf("%d",&n);
for(i=n+1;;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
break;
}
if(j==i)
{
printf("The next prime number is :%d",i);
break;
}
}
getch();
}