100以内输出素数问题
#include <stdio.h>
#include <stdlib.h>
int main()
{
//输出100以内的素数
int i,j;
int IsPrime = 1; //素数情况下
for(i = 2;i < 100;i++)
{
for(j = 2;j < i;j++)
{
if(i%j == 0)
{
IsPrime = 0;
break;
}
}
if(IsPrime == 1)
{
printf("%d ",i);
}
}
return 0;
}
帮我看下哪里出错了 #include <stdio.h>
#include <stdlib.h>
int main()
{
//输出100以内的素数
int i, j;
int IsPrime = 1; //素数情况下
for(i = 2; i < 100; i++)
{
for(j = 2; j < i; j++)
{
if(i % j == 0)
{
// IsPrime = 0;
printf("%d ",i);
break;
}
// }
// if(IsPrime == 1)
// {
// printf("%d ",i);
// }
}
}
return 0;
}
多了不必要的东西~~ IsPrime = 1; // 每次初始化为1
for(j = 2;j < i;j++) IsPrime = 1;应该写在第一个for循环里
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, j, IsPrime;
for (i = 2; i <= 100; i++)
{ IsPrime = 1;//标记
for (j = 2; j < i; j++)
{
if (i%j == 0)
IsPrime = 0;
break;
}
if ( IsPrime==1)
printf("%d\n", i);
}
system("pause");
return 0;
} 紫魔洪荒 发表于 2018-8-26 22:05
IsPrime = 1;应该写在第一个for循环里
#include
#include
能解释一下为什么吗{:5_94:} 本帖最后由 gary冥霧 于 2018-8-27 19:56 编辑
昔日少年郎 发表于 2018-8-27 09:18
能解释一下为什么吗
如果你不把IsPrime = 1;写在第一个for循环里,的話那IsPrime = 1;只有在第一次執行時成立,第二次跑for迴圈時IsPrime並不等於1而是永遠等於0。
正確程式碼如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, j, IsPrime;
for (i = 2; i <= 100; i++)
{
IsPrime = 1;
for (j = 2; j < i; j++)
{
if (i%j == 0)
{
IsPrime = 0;
break;
}
}
if ( IsPrime==1)
printf("%d\n", i);
}
system("pause");
return 0;
}
對了魚油(紫魔洪荒)#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, j, IsPrime;
for (i = 2; i <= 100; i++)
{ IsPrime = 1;//标记
for (j = 2; j < i; j++)
{
if (i%j == 0)//你少加 " { "
IsPrime = 0;
break;//和 " } " 沒這組大括弧會差很多!!
}
if ( IsPrime==1)
printf("%d\n", i);
}
system("pause");
return 0;
}
不知道是否解決您的問題,同時也請您找出最佳解答!!感謝 本帖最后由 关键是感觉 于 2018-8-28 15:31 编辑
#include "stdio.h"
#include "math.h"
intis(int b){
int ret=1;
if(b!=2 && b%2==0){
ret=0;
}else{
int i;
int j=(int)sqrt(b);
for(i=3;i<=j;i+=2){
if(b%i==0){
ret=0;
break;
}
}
}
return ret;
}
int main(){
int i;
for(i=2;i<=100;i++){
if(is(i)){
printf("%d ",i);
}
}
return 0;
}
应该是最快计算素数的方式了吧 关键是感觉 发表于 2018-8-27 17:52
应该是最快计算素数的方式了吧
并不是哦,
#include<iostream>
#include<math.h>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<time.h>
#define maxn 1000005
using namespace std;
int prime;
int qpow(int a, int b,int p)//快速幂取模
{
if (b == 0)return 1;
else {
int temp = qpow(a, b / 2,p)%p;
if (b % 2 != 0)return a *( temp*temp%p)%p;
if (b % 2 == 0)return (temp*temp%p) % p;
}
}
bool isprime(int n)
{
int i;
if (n == 1)return false;
if (n == 2)return true;
for (i = 0; i < 6; i++) {
int p = rand() %( n - 1) + 1;
if (qpow(p, n - 1, n) != 1)return false;
}
return true;
}
int main()
{
srand(time(NULL));
int n;
int i;
cin >> n;
int count = 0;
while (n--) {
cin >> i;
if (isprime(i))count++;
}
cout << count << endl;
return 0;
} 因为它每个数进行判断是不是素数都要进行标记的,每个数开始标记为1,如果判断它不是素数就改变标记的值为0,最后输出标记为1的值,也就是素数。
页:
[1]